{"version":3,"file":"MovingGradientText.Dvj2Lysx.mjs","names":["React.useRef","React.useMemo","React.useCallback","React.Fragment"],"sources":["https:/framerusercontent.com/modules/PNCAYhcnqgqA00sZBkxU/KZBC0OLLoMVBwarKqzMG/MovingGradientText.js"],"sourcesContent":["// @framerSupportedLayoutWidth any\n// @framerSupportedLayoutHeight any\n// @framerIntrinsicWidth 800\n// @framerIntrinsicHeight 240\nimport{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";// Built-in vertical influence (relative to X) for coordinate-based gradient movement.\nconst DEFAULT_Y_INFLUENCE=1;const DEFAULT_DRIFT_SPEED=.85;// >100% is required so background-position panning is visible with gradients.\n// We keep positions wrapped (0..100) to avoid large-number rendering glitches.\nconst GRADIENT_OVERSCAN=200// %\n;const GRADIENT_CYCLES=2// repeat the palette across 0..100% so colors remain visible even with overscan\n;// Motion feel tuning (coordinate-based)\nconst SPRING_ZETA=.85// damping ratio (<1 allows slight overshoot)\n;const RESPONSE_GAMMA=1.15// nonlinear response; reduces \"joystick\" feel near center\n;const DRIFT_AMPLITUDE=10// % max drift offset on leave\n;function softClampPercent(p){// Softly bounds p into (0..100) without hard \"sticking\" at the edges.\nconst d=p-50;return 50+50*Math.tanh(d/50);}function curveSigned(d,gamma){const s=Math.sign(d);const a=Math.abs(d);return s*Math.pow(a,gamma);}function clamp01(n){return Math.min(1,Math.max(0,n));}function parseBracketMarkup(input){// Robust rules:\n// - no nesting support (first [[ pairs with next ]])\n// - unbalanced brackets render as normal text\n// - never throw\nconst text=String(input??\"\");const out=[];let i=0;let highlightIndex=0;while(i<text.length){const open=text.indexOf(\"[[\",i);if(open===-1){const tail=text.slice(i);if(tail)out.push({type:\"text\",value:tail});break;}// normal leading text\nif(open>i)out.push({type:\"text\",value:text.slice(i,open)});const close=text.indexOf(\"]]\",open+2);if(close===-1){// unbalanced: treat the rest as normal text (including the [[)\nout.push({type:\"text\",value:text.slice(open)});break;}const inner=text.slice(open+2,close);out.push({type:\"highlight\",value:inner,key:`h-${highlightIndex++}`});i=close+2;}return out;}const PRESETS={// Inspired by the provided reference image: deep teal base with neon mint/cyan and warm peach/pink highlights.\nAurora:[\"#22E6B6\",\"#38E8FF\",\"#FFC2A3\",\"#FF5BB8\",\"#8E7CFF\"],// Inspired by the provided \"Heat\" reference image: warm glow (yellow/orange) with hot pink edges and lavender cores.\nHeat:[\"#FFF1D6\",\"#FFD166\",\"#FF9B1A\",\"#FF3D6E\",\"#C9A7FF\"],// Inspired by the provided \"Lime\" reference image: pale mint → soft chartreuse → bright lime → deep teal.\nLime:[\"#E9F6D8\",\"#D7F0B9\",\"#C9E85C\",\"#B8D800\",\"#0B6B5A\"],// Inspired by the provided \"Sunset\" reference image: deep navy → electric blue → violet → magenta → coral.\nSunset:[\"#060B2A\",\"#1B2CFF\",\"#6A00FF\",\"#FF2DAA\",\"#FF7A3D\"]};function buildCycledGradient(angle,colors,cycles){const safeCycles=Math.max(1,Math.floor(cycles));const n=colors.length;if(n<2){const c=colors[0]??\"#000000\";return`linear-gradient(${angle}deg, ${c}, ${c})`;}const m=n*safeCycles;const denom=Math.max(1,m-1);const stops=[];for(let i=0;i<m;i++){const c=colors[i%n];const p=i/denom*100;stops.push(`${c} ${p.toFixed(2)}%`);}return`linear-gradient(${angle}deg, ${stops.join(\", \")})`;}function buildLoopGradient(angle,colors){// Matches the proven CSS recipe:\n// linear-gradient(..., c1, c2, ..., cN, c1) so the sweep loops without a seam.\nconst n=colors.length;if(n<2){const c=colors[0]??\"#000000\";return`linear-gradient(${angle}deg, ${c}, ${c})`;}const stops=colors.concat(colors[0]).join(\", \");return`linear-gradient(${angle}deg, ${stops})`;}// @framerSupportedLayoutWidth any\n// @framerSupportedLayoutHeight any\n// @framerIntrinsicWidth 800\n// @framerIntrinsicHeight 240\nexport default function CursorReactiveGradientText(props){const{text,font,baseColor,hAlign,verticalAlign,paddingTop,paddingRight,paddingBottom,paddingLeft,paletteSource,preset,customColors,angle,fieldScale,enabled,intensity,smoothness,onLeave,style}=props;const rootRef=React.useRef(null);const hoveringRef=React.useRef(false);const driftRef=React.useRef(false);const driftT0Ref=React.useRef(0);const driftOriginRef=React.useRef({x:50,y:50})// percent-space\n;const freezeRef=React.useRef({x:50,y:50})// percent-space\n;const targetRef=React.useRef({x:.5,y:.5})// cursor pos (0..1)\n;const currentRef=React.useRef({x:50,y:50})// percent-space current\n;const velocityRef=React.useRef({x:0,y:0})// percent/sec\n;const rafRef=React.useRef(null);const lastTRef=React.useRef(0);const segments=React.useMemo(()=>parseBracketMarkup(text),[text]);const colors=React.useMemo(()=>{if(paletteSource===\"Custom\"){const filtered=(customColors??[]).filter(Boolean);return filtered.length>=2?filtered:PRESETS[preset]??PRESETS.Aurora;}return PRESETS[preset]??PRESETS.Aurora;},[paletteSource,preset,customColors]);const gradient=React.useMemo(()=>{return buildLoopGradient(angle,colors);},[colors,angle]);const setCssVars=React.useCallback((gxPercent,gyPercent)=>{const el=rootRef.current;if(!el)return;el.style.setProperty(\"--crgt-gx\",`${softClampPercent(gxPercent)}%`);el.style.setProperty(\"--crgt-gy\",`${softClampPercent(gyPercent)}%`);},[]);const applyLeaveBehavior=React.useCallback(()=>{hoveringRef.current=false;if(!enabled)return;if(onLeave===\"Settle\"){driftRef.current=false;// no-op; settle handled in tick\nreturn;}if(onLeave===\"Freeze\"){driftRef.current=false;freezeRef.current={...currentRef.current};return;}// Drift\ndriftRef.current=true;driftT0Ref.current=performance.now();// Start drifting exactly from where the cursor left.\ndriftOriginRef.current={...currentRef.current};freezeRef.current={...currentRef.current};},[enabled,onLeave]);const onPointerMove=React.useCallback(e=>{if(!enabled)return;const el=rootRef.current;if(!el)return;const r=el.getBoundingClientRect();const w=Math.max(1,r.width);const h=Math.max(1,r.height);const x=clamp01((e.clientX-r.left)/w);const y=clamp01((e.clientY-r.top)/h);targetRef.current={x,y};},[enabled]);const onPointerEnter=React.useCallback(()=>{hoveringRef.current=true;driftRef.current=false;},[]);const onPointerLeave=React.useCallback(()=>{applyLeaveBehavior();},[applyLeaveBehavior]);React.useEffect(()=>{// Initialize vars\nsetCssVars(currentRef.current.x,currentRef.current.y);const tick=t=>{const last=lastTRef.current||t;const dt=Math.max(0,Math.min(.05,(t-last)/1e3));lastTRef.current=t;// Coordinate-based mapping: cursor position maps to a large gradient field.\n// No phase loops; gradient moves to follow cursor smoothly.\nlet desiredX=50;let desiredY=50;if(!enabled){desiredX=50;desiredY=50;}else if(hoveringRef.current){const c=targetRef.current;const dx=curveSigned(clamp01(c.x)-.5,RESPONSE_GAMMA);const dy=curveSigned(clamp01(c.y)-.5,RESPONSE_GAMMA);const range=Math.max(0,fieldScale)/100;const ix=Math.max(0,intensity);desiredX=50+dx*ix*100*range;desiredY=50+dy*ix*100*range*DEFAULT_Y_INFLUENCE;}else{// Pointer not inside: respect On Leave behavior\nif(onLeave===\"Settle\"){driftRef.current=false;desiredX=50;desiredY=50;}else if(onLeave===\"Freeze\"){driftRef.current=false;desiredX=freezeRef.current.x;desiredY=freezeRef.current.y;}else{// Drift around the leave point (subtle ambient motion)\ndriftRef.current=true;const tt=(t-driftT0Ref.current)/1e3;const a=DRIFT_AMPLITUDE*(.6+DEFAULT_DRIFT_SPEED*.6);desiredX=driftOriginRef.current.x+Math.sin(tt*.9)*a;desiredY=driftOriginRef.current.y+Math.cos(tt*.75)*(a*.65);}}// 2nd-order spring smoothing (fluid, non-robotic)\nconst s01=clamp01(smoothness/.6);const f=2+s01*14// Hz-ish\n;const omega=2*Math.PI*f;const k=omega*omega;const c=2*SPRING_ZETA*omega;let x=currentRef.current.x;let y=currentRef.current.y;let vx=velocityRef.current.x;let vy=velocityRef.current.y;const ax=k*(desiredX-x)-c*vx;const ay=k*(desiredY-y)-c*vy;vx+=ax*dt;vy+=ay*dt;// Clamp velocity to prevent rare spikes on big dt.\nconst maxV=600;vx=Math.max(-maxV,Math.min(maxV,vx));vy=Math.max(-maxV,Math.min(maxV,vy));x=x+vx*dt;y=y+vy*dt;currentRef.current={x,y};velocityRef.current={x:vx,y:vy};setCssVars(x,y);rafRef.current=requestAnimationFrame(tick);};rafRef.current=requestAnimationFrame(tick);return()=>{if(rafRef.current!=null)cancelAnimationFrame(rafRef.current);rafRef.current=null;};},[enabled,intensity,smoothness,onLeave,fieldScale,setCssVars]);const justifyContent=hAlign===\"left\"?\"flex-start\":hAlign===\"right\"?\"flex-end\":\"center\";const alignItems=verticalAlign===\"top\"?\"flex-start\":verticalAlign===\"bottom\"?\"flex-end\":\"center\";const rootStyle={...style,width:style?.width??\"100%\",height:style?.height??\"100%\",display:\"flex\",alignItems:\"stretch\",justifyContent:\"stretch\",pointerEvents:\"auto\"};const layoutStyle={width:\"100%\",height:\"100%\",display:\"flex\",justifyContent,alignItems,paddingTop,paddingRight,paddingBottom,paddingLeft,boxSizing:\"border-box\"};const textStyle={...font??{},color:baseColor,margin:0,whiteSpace:\"pre-wrap\",wordBreak:\"break-word\",lineHeight:font?.lineHeight??undefined};const highlightStyle={// Flowing palette: the gradient itself moves.\nbackgroundImage:gradient,// Overscan both axes so background-position Y movement is visible.\nbackgroundSize:`${GRADIENT_OVERSCAN}% ${GRADIENT_OVERSCAN}%`,backgroundPosition:`var(--crgt-gx, 50%) var(--crgt-gy, 50%)`,backgroundRepeat:\"no-repeat\",WebkitBackgroundClip:\"text\",backgroundClip:\"text\",color:\"transparent\"};return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:rootStyle,onPointerMove:onPointerMove,onPointerEnter:onPointerEnter,onPointerLeave:onPointerLeave,children:/*#__PURE__*/_jsx(\"div\",{style:layoutStyle,children:/*#__PURE__*/_jsx(\"div\",{style:textStyle,children:segments.map((seg,idx)=>{if(seg.type===\"highlight\"){// Preserve empty highlights as empty spans (no crash).\nreturn /*#__PURE__*/_jsx(\"span\",{style:highlightStyle,children:seg.value},seg.key);}return /*#__PURE__*/_jsx(React.Fragment,{children:seg.value},`t-${idx}`);})})})});}CursorReactiveGradientText.defaultProps={text:\"[[Gradient text]] that can [[shimmer]] with cursor movement.\",baseColor:\"#111111\",hAlign:\"center\",verticalAlign:\"center\",padding:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0,paletteSource:\"Preset\",preset:\"Aurora\",customColors:[\"#00D1FF\",\"#7C3AED\",\"#FF2D95\",\"#FFB800\"],angle:20,fieldScale:180,enabled:true,intensity:.6,smoothness:.18,onLeave:\"Freeze\"};addPropertyControls(CursorReactiveGradientText,{text:{type:ControlType.String,title:\"Content\",displayTextArea:true,description:\"Wrap highlighted text in [[double brackets]].\"},font:{type:ControlType.Font,title:\"Text\",controls:\"extended\",description:\"Font, size, weight, line height, and alignment for the text.\"},baseColor:{type:ControlType.Color,title:\"Base\",description:\"Color of non‑highlighted text.\"},hAlign:{type:ControlType.Enum,title:\"H Align\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],description:\"Positions the text block horizontally inside the wrapper.\"},verticalAlign:{type:ControlType.Enum,title:\"V Align\",options:[\"top\",\"center\",\"bottom\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],defaultValue:\"center\",description:\"Positions the text block vertically inside the wrapper.\"},padding:{type:ControlType.FusedNumber,title:\"Padding\",defaultValue:0,toggleKey:\"padding\",toggleTitles:[\"All\",\"Sides\"],valueKeys:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0,description:\"Inner spacing between the wrapper edges and the text.\"},paletteSource:{type:ControlType.Enum,title:\"Gradient\",options:[\"Preset\",\"Custom\"],optionTitles:[\"Preset\",\"Custom\"],defaultValue:\"Preset\",description:\"Choose how gradient colors are defined.\"},preset:{type:ControlType.Enum,title:\"Preset\",options:Object.keys(PRESETS),description:\"Select a prebuilt gradient palette.\",hidden(props){return props.paletteSource!==\"Preset\";}},customColors:{type:ControlType.Array,title:\"Colors\",defaultValue:CursorReactiveGradientText.defaultProps.customColors,control:{type:ControlType.Color},description:\"Add multiple colors (evenly distributed across the gradient).\",hidden(props){return props.paletteSource!==\"Custom\";}},angle:{type:ControlType.Number,title:\"Angle\",min:0,max:360,step:1,description:\"Direction of the gradient.\"},fieldScale:{type:ControlType.Number,title:\"Field %\",min:50,max:400,step:10,description:\"How far the gradient moves (bigger = more shimmer travel).\"},enabled:{type:ControlType.Boolean,title:\"Cursor\",enabledTitle:\"On\",disabledTitle:\"Off\",defaultValue:true,description:\"Enable cursor‑reactive shimmer within the wrapper bounds.\"},intensity:{type:ControlType.Number,title:\"Intensity\",min:0,max:1.5,step:.01,description:\"How far the gradient shifts with cursor movement.\"},smoothness:{type:ControlType.Number,title:\"Smooth\",min:.01,max:.6,step:.01,description:\"Lag/inertia (higher = follows faster).\"},onLeave:{type:ControlType.Enum,title:\"On Leave\",options:[\"Settle\",\"Freeze\",\"Drift\"],optionTitles:[\"Settle\",\"Freeze\",\"Drift\"],defaultValue:\"Freeze\",description:\"What the shimmer does when the cursor leaves the wrapper.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"CursorReactiveGradientTextProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"CursorReactiveGradientText\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"\",\"framerSupportedLayoutWidth\":\"\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"\",\"framerSupportedLayoutHeight\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MovingGradientText.map"],"mappings":"sMAaC,SAAS,EAAiB,EAAE,CAC7B,IAAM,EAAE,EAAE,GAAG,MAAO,IAAG,GAAG,KAAK,KAAK,EAAE,EAAE,CAAE,CAAC,SAAS,EAAY,EAAE,EAAM,CAA0C,OAAjC,KAAK,KAAK,CAA8B,EAAnB,KAAK,IAAI,CAAqB,IAAE,CAAO,CAAC,SAAS,EAAQ,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAE,CAAC,SAAS,EAAmB,EAAM,CAItO,IAAM,EAAK,OAAO,GAAO,EAAE,EAAQ,EAAI,CAAC,EAAM,EAAE,EAAM,EAAe,EAAE,KAAM,EAAE,EAAK,QAAO,CAAC,IAAM,EAAK,EAAK,QAAQ,KAAK,CAAC,EAAE,GAAG,IAAO,GAAG,CAAC,IAAM,EAAK,EAAK,MAAM,CAAC,EAAK,GAAK,EAAI,KAAK,CAAC,KAAK,OAAO,MAAM,CAAI,CAAC,EAAE,KAAM,CACjN,EAAK,GAAE,EAAI,KAAK,CAAC,KAAK,OAAO,MAAM,EAAK,MAAM,EAAE,CAAI,CAAC,CAAC,EAAE,IAAM,EAAM,EAAK,QAAQ,KAAK,EAAK,CAAC,EAAE,GAAG,IAAQ,GAAG,CAC/G,EAAI,KAAK,CAAC,KAAK,OAAO,MAAM,EAAK,MAAM,CAAI,CAAC,CAAC,EAAE,KAAM,CAAC,IAAM,EAAM,EAAK,MAAM,EAAK,EAAE,CAAK,EAAE,EAAI,KAAK,CAAC,KAAK,YAAY,MAAM,EAAM,IAAI,KAAK,KAAkB,CAAC,EAAE,EAAE,EAAM,CAAE,CAAC,OAAO,CAAI,CAIkT,SAAS,EAAkB,EAAM,EAAO,CAE1f,GAAd,EAAO,OAAY,EAAE,CAAC,IAAM,EAAE,EAAO,IAAI,UAAU,MAAM,mBAAmB,EAAM,OAAO,EAAE,IAAI,EAAE,EAAG,CAAiD,MAAM,mBAAmB,EAAM,OAAnE,EAAO,OAAO,EAAO,EAAE,CAAC,CAAC,KAAK,IAAgD,EAAE,EAAG,CAI5M,SAAwB,EAA2B,EAAM,CAAC,GAAK,CAAC,OAAK,OAAK,YAAU,SAAO,gBAAc,aAAW,eAAa,gBAAc,cAAY,gBAAc,SAAO,eAAa,QAAM,aAAW,UAAQ,YAAU,aAAW,UAAQ,SAAO,EAAY,EAAQA,EAAa,IAAI,EAAQ,EAAYA,EAAa,EAAK,EAAQ,EAASA,EAAa,EAAK,EAAQ,EAAWA,EAAa,CAAC,EAAQ,EAAeA,EAAa,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EACjb,EAAUA,EAAa,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAClC,EAAUA,EAAa,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAClC,EAAWA,EAAa,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EACnC,EAAYA,EAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClC,EAAOA,EAAa,IAAI,EAAQ,EAASA,EAAa,CAAC,EAAQ,EAASC,MAAkB,EAAmB,CAAI,EAAE,CAAC,CAAI,CAAC,EAAQ,EAAOA,MAAkB,CAAC,GAAG,IAAgB,SAAS,CAAC,IAAM,GAAU,GAAc,CAAC,EAAA,CAAG,OAAO,OAAO,EAAE,OAAO,EAAS,QAAQ,EAAE,EAAS,EAAQ,IAAS,EAAQ,MAAO,CAAC,OAAO,EAAQ,IAAS,EAAQ,MAAO,EAAE,CAAC,EAAc,EAAO,CAAY,CAAC,EAAQ,EAASA,MAA0B,EAAkB,EAAM,CAAM,EAAI,CAAC,EAAO,CAAK,CAAC,EAAQ,EAAWC,GAAmB,EAAU,IAAY,CAAC,IAAM,EAAG,EAAQ,QAAY,IAAU,EAAG,MAAM,YAAY,YAAY,GAAG,EAAiB,CAAS,EAAE,EAAE,EAAE,EAAG,MAAM,YAAY,YAAY,GAAG,EAAiB,CAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAQ,EAAmBA,MAAsB,CAAC,KAAY,QAAQ,GAAU,EAAe,IAAG,IAAU,SAAS,CAAC,EAAS,QAAQ,GACn1B,MAAO,CAAC,GAAG,IAAU,SAAS,CAAC,EAAS,QAAQ,GAAM,EAAU,QAAQ,CAAC,GAAG,EAAW,OAAO,EAAE,MAAO,CACvG,EAAS,QAAQ,GAAK,EAAW,QAAQ,YAAY,IAAI,EACzD,EAAe,QAAQ,CAAC,GAAG,EAAW,OAAO,EAAE,EAAU,QAAQ,CAAC,GAAG,EAAW,OAAO,CAFhF,CAEkF,EAAE,CAAC,EAAQ,CAAO,CAAC,EAAQ,EAAcA,EAAkB,GAAG,CAAC,GAAG,CAAC,EAAQ,OAAO,IAAM,EAAG,EAAQ,QAAQ,GAAG,CAAC,EAAG,OAAO,IAAM,EAAE,EAAG,sBAAsB,EAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,EAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,EAAQ,EAAE,GAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAQ,EAAE,GAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAU,QAAQ,CAAC,IAAE,GAAC,CAAE,EAAE,CAAC,CAAO,CAAC,EAAQ,GAAeA,MAAsB,CAAC,EAAY,QAAQ,GAAK,EAAS,QAAQ,EAAM,EAAE,CAAC,CAAC,EAAQ,GAAeA,MAAsB,CAAC,EAAmB,CAAE,EAAE,CAAC,CAAkB,CAAC,EAAE,MAAoB,CAC7mB,EAAW,EAAW,QAAQ,EAAE,EAAW,QAAQ,CAAC,EAAE,IAAM,EAAK,GAAG,CAAC,IAAM,EAAK,EAAS,SAAS,EAAQ,EAAG,KAAK,IAAI,EAAE,KAAK,IAAI,KAAK,EAAE,GAAM,GAAG,CAAC,EAAE,EAAS,QAAQ,EAErK,IAAI,EAAS,GAAO,EAAS,GAAG,GAAG,CAAC,EAAS,EAAS,GAAG,EAAS,QAAS,GAAG,EAAY,QAAQ,CAAC,IAAM,EAAE,EAAU,QAAc,EAAG,EAAY,EAAQ,EAAE,CAAC,EAAE,GAAG,CAAc,EAAQ,EAAG,EAAY,EAAQ,EAAE,CAAC,EAAE,GAAG,CAAc,EAAQ,EAAM,KAAK,IAAI,EAAE,CAAU,EAAE,IAAU,EAAG,KAAK,IAAI,EAAE,CAAS,EAAE,EAAS,GAAG,EAAG,EAAG,IAAI,EAAM,EAAS,GAAG,EAAG,EAAG,IAAI,EAAM,CAAoB,MACzX,GAAG,IAAU,SAAU,EAAS,QAAQ,GAAM,EAAS,GAAG,EAAS,QAAS,GAAG,IAAU,SAAU,EAAS,QAAQ,GAAM,EAAS,EAAU,QAAQ,EAAE,EAAS,EAAU,QAAQ,MAAO,CACzL,EAAS,QAAQ,GAAK,IAAM,GAAI,EAAE,EAAW,SAAS,IAAU,EAAE,EAAiB,mBAA2B,EAAS,EAAe,QAAQ,EAAE,KAAK,IAAI,EAAG,EAAE,EAAE,EAAE,EAAS,EAAe,QAAQ,EAAE,KAAK,IAAI,EAAG,GAAG,GAAG,EAAE,IAAK,CAC5L,IAAM,EAAE,EAA/B,EAAQ,EAAW,EAAgB,EAAE,GACxC,EAAM,EAAE,KAAK,GAAG,EAAQ,EAAE,EAAM,EAAY,EAAE,EAAE,EAAY,EAAU,EAAE,EAAW,QAAQ,EAAM,EAAE,EAAW,QAAQ,EAAM,EAAG,EAAY,QAAQ,EAAM,EAAG,EAAY,QAAQ,EAAQ,EAAG,GAAG,EAAS,GAAG,EAAE,EAAS,EAAG,GAAG,EAAS,GAAG,EAAE,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EACrP,EAAG,KAAK,IAAI,KAAM,KAAK,IAAI,IAAK,CAAE,CAAC,EAAE,EAAG,KAAK,IAAI,KAAM,KAAK,IAAI,IAAK,CAAE,CAAC,EAAE,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAW,QAAQ,CAAC,IAAE,GAAC,EAAE,EAAY,QAAQ,CAAC,EAAE,EAAG,EAAE,CAAE,EAAE,EAAW,EAAE,CAAC,EAAE,EAAO,QAAQ,sBAAsB,CAAI,CAAE,EAA6C,MAA3C,GAAO,QAAQ,sBAAsB,CAAI,MAAY,CAAI,EAAO,SAAS,MAAK,qBAAqB,EAAO,OAAO,EAAE,EAAO,QAAQ,IAAK,CAAE,EAAE,CAAC,EAAQ,EAAU,EAAW,EAAQ,EAAW,CAAU,CAAC,EAAE,IAAM,GAAe,IAAS,OAAO,aAAa,IAAS,QAAQ,WAAW,SAAe,GAAW,IAAgB,MAAM,aAAa,IAAgB,SAAS,WAAW,SAAe,GAAU,CAAC,GAAG,EAAM,MAAM,GAAO,OAAO,OAAO,OAAO,GAAO,QAAQ,OAAO,QAAQ,OAAO,WAAW,UAAU,eAAe,UAAU,cAAc,MAAM,EAAQ,GAAY,CAAC,MAAM,OAAO,OAAO,OAAO,QAAQ,OAAO,kBAAe,cAAW,aAAW,eAAa,gBAAc,cAAY,UAAU,YAAY,EAAQ,GAAU,CAAC,GAAG,GAAM,CAAC,EAAE,MAAM,EAAU,OAAO,EAAE,WAAW,WAAW,UAAU,aAAa,WAAW,GAAM,YAAY,IAAA,EAAS,EAAQ,GAAe,CAC1kC,gBAAgB,EAChB,eAAe,GAAG,EAAkB,IAAI,EAAkB,GAAG,mBAAmB,0CAA0C,iBAAiB,YAAY,qBAAqB,OAAO,eAAe,OAAO,MAAM,aAAa,EAAE,OAAoB,EAAK,MAAM,CAAC,IAAI,EAAQ,MAAM,GAAwB,gBAA6B,kBAA8B,kBAAe,SAAsB,EAAK,MAAM,CAAC,MAAM,GAAY,SAAsB,EAAK,MAAM,CAAC,MAAM,GAAU,SAAS,EAAS,KAAK,EAAI,IAAU,EAAI,OAAO,YACpf,EAAK,OAAO,CAAC,MAAM,GAAe,SAAS,EAAI,KAAK,EAAE,EAAI,GAAG,EAAuB,EAAKC,EAAe,CAAC,SAAS,EAAI,KAAK,EAAE,KAAK,GAAK,CAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,6BA7C5H,IAA4B,IAAoD,EACpH,EAAoB,EAEpB,EAAkB,IAGlB,EAAY,IACX,EAAe,KACf,EAAgB,GAQsK,EAAQ,CACrM,OAAO,CAAC,UAAU,UAAU,UAAU,UAAU,SAAS,EACzD,KAAK,CAAC,UAAU,UAAU,UAAU,UAAU,SAAS,EACvD,KAAK,CAAC,UAAU,UAAU,UAAU,UAAU,SAAS,EACvD,OAAO,CAAC,UAAU,UAAU,UAAU,UAAU,SAAS,CAAC,EAyB6G,EAA2B,aAAa,CAAC,KAAK,+DAA+D,UAAU,UAAU,OAAO,SAAS,cAAc,SAAS,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,SAAS,OAAO,SAAS,aAAa,CAAC,UAAU,UAAU,UAAU,SAAS,EAAE,MAAM,GAAG,WAAW,IAAI,QAAQ,GAAK,UAAU,GAAG,WAAW,IAAI,QAAQ,QAAQ,EAAE,EAAoB,EAA2B,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,gBAAgB,GAAK,YAAY,+CAA+C,EAAE,KAAK,CAAC,KAAK,EAAY,KAAK,MAAM,OAAO,SAAS,WAAW,YAAY,8DAA8D,EAAE,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,OAAO,YAAY,gCAAgC,EAAE,OAAO,CAAC,KAAK,EAAY,KAAK,MAAM,UAAU,QAAQ,CAAC,OAAO,SAAS,OAAO,EAAE,aAAa,CAAC,OAAO,SAAS,OAAO,EAAE,YAAY,2DAA2D,EAAE,cAAc,CAAC,KAAK,EAAY,KAAK,MAAM,UAAU,QAAQ,CAAC,MAAM,SAAS,QAAQ,EAAE,aAAa,CAAC,MAAM,SAAS,QAAQ,EAAE,aAAa,SAAS,YAAY,yDAAyD,EAAE,QAAQ,CAAC,KAAK,EAAY,YAAY,MAAM,UAAU,aAAa,EAAE,UAAU,UAAU,aAAa,CAAC,MAAM,OAAO,EAAE,UAAU,CAAC,aAAa,eAAe,gBAAgB,aAAa,EAAE,YAAY,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,YAAY,uDAAuD,EAAE,cAAc,CAAC,KAAK,EAAY,KAAK,MAAM,WAAW,QAAQ,CAAC,SAAS,QAAQ,EAAE,aAAa,CAAC,SAAS,QAAQ,EAAE,aAAa,SAAS,YAAY,yCAAyC,EAAE,OAAO,CAAC,KAAK,EAAY,KAAK,MAAM,SAAS,QAAQ,OAAO,KAAK,CAAO,EAAE,YAAY,sCAAsC,OAAO,EAAM,CAAC,OAAO,EAAM,gBAAgB,QAAS,CAAC,EAAE,aAAa,CAAC,KAAK,EAAY,MAAM,MAAM,SAAS,aAAa,EAA2B,aAAa,aAAa,QAAQ,CAAC,KAAK,EAAY,KAAK,EAAE,YAAY,gEAAgE,OAAO,EAAM,CAAC,OAAO,EAAM,gBAAgB,QAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,YAAY,4BAA4B,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,YAAY,4DAA4D,EAAE,QAAQ,CAAC,KAAK,EAAY,QAAQ,MAAM,SAAS,aAAa,KAAK,cAAc,MAAM,aAAa,GAAK,YAAY,2DAA2D,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,YAAY,mDAAmD,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,YAAY,wCAAwC,EAAE,QAAQ,CAAC,KAAK,EAAY,KAAK,MAAM,WAAW,QAAQ,CAAC,SAAS,SAAS,OAAO,EAAE,aAAa,CAAC,SAAS,SAAS,OAAO,EAAE,aAAa,SAAS,YAAY,2DAA2D,CAAC,CAAC"}