{"version":3,"sources":["webpack:///./node_modules/framer-motion/dist/framer-motion.es.js"],"names":["isRefObject","ref","hasOwnProperty","SubscriptionManager","this","subscriptions","Set","prototype","add","handler","_this","delete","notify","a","b","c","e_1","_a","size","_b","_c","next","done","value","e_1_1","error","return","call","clear","MotionValue","init","timeDelta","lastUpdated","updateSubscribers","renderSubscribers","canTrackVelocity","updateAndNotify","v","render","prev","current","delta","timestamp","postRender","scheduleVelocityCheck","velocityCheck","set","isNaN","parseFloat","onChange","subscription","clearListeners","onRenderRequest","get","attach","passiveEffect","getPrevious","getVelocity","start","animation","stop","Promise","resolve","stopAnimation","then","clearAnimation","isAnimating","destroy","motionValue","secondsToMilliseconds","seconds","easingLookup","linear","easeIn","easeInOut","easeOut","circIn","circInOut","circOut","backIn","backInOut","backOut","anticipate","bounceIn","bounceInOut","bounceOut","easingDefinitionToFunction","definition","Array","isArray","length","x1","y1","x2","y2","undefined","isAnimatable","key","test","startsWith","isKeyframesTarget","underDampedSpring","type","stiffness","damping","restDelta","restSpeed","overDampedSpring","to","linearTween","ease","duration","keyframes","values","defaultTransitions","x","y","z","rotate","rotateX","rotateY","rotateZ","scaleX","scaleY","scale","opacity","backgroundColor","color","default","convertTransitionToAnimationOptions","yoyo","loop","flip","times","transition","options","offset","repeatDelay","isEasingArray","map","repeatType","repeat","getPopmotionAnimationOptions","valueKey","transitionFactory","from","hydrateKeyframes","when","delay","delayChildren","staggerChildren","staggerDirection","Object","keys","isTransitionDefined","startAnimation","target","onComplete","delayTimer","controls","valueTransition","getValueTransition","origin","isTargetAnimatable","getAnimatableNone","isOriginAnimatable","velocity","onUpdate","getAnimation","_d","_e","getDelayFromTransition","setTimeout","clearTimeout","resolveFinalValueInKeyframes","int","transform","Math","round","defaultValueTypes","outlineColor","fill","stroke","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderWidth","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderRadius","radius","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","width","maxWidth","height","maxHeight","top","right","bottom","left","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","scaleZ","skew","skewX","skewY","distance","translateX","translateY","translateZ","perspective","transformPerspective","originX","originY","originZ","zIndex","fillOpacity","strokeOpacity","numOctaves","dimensionValueTypes","parse","testValueType","findDimensionValueType","find","valueTypes","findValueType","getDefaultValueType","getValueAsType","isVariantLabels","isVariantLabel","resolveVariant","visualElement","variant","custom","resolved","isVariantResolver","getVariantPayload","forEachValue","getCurrent","getDefaultTransition","setMotionValue","hasValue","getValue","addValue","setTarget","priority","makeTargetAnimatable","transitionEnd","baseTarget","setVariants","variantLabels","reverse","forEach","getVariant","variantChildren","child","setValues","checkTargetForNewValues","newValueKeys","filter","numNewValues","i","targetValue","readValue","readNativeValue","getOriginFromTransition","getOrigin","startVisualElementAnimation","opts","activeOverrides","resetIsAnimating","animations","label","animateVariant","all","animateVariantLabels","animateTarget","onAnimationStart","onAnimationComplete","variantDefinition","getChildrenAnimations","variantChildrenOrder","forwardDelay","variantLabel","maxStaggerDuration","generateStaggerDuration","push","animateChildren","first","last","transitionOverride","targetAndTransition","resolvedOverrides","valueTarget","has","allAnimations","setOverride","index","overrides","startOverride","override","clearOverride","highest","getHighestOverridePriortiy","overrideTarget","remainingValues","max","apply","VisualElement","parent","children","latest","Map","valueSubscriptions","config","isMounted","update","triggerRender","element","mount","unmount","externalRef","rootParent","treePath","depth","variants","addVariantChild","addVariantChildOrder","checkOverrideIsAnimating","numOverrides","resolvedOverride","subscribe","removeValue","setSingleStaticValue","subscribeToValue","defaultValue","callback","getInstance","updateConfig","setStaticValues","scheduleRender","scheduleUpdateLayoutDelta","preRender","updateLayoutDelta","unsubscribeOnChange","unsubscribeOnRender","removeFromParent","_","noop","any","convertBoundingBoxToAxisBox","min","copyAxisBox","box","zeroDelta","translate","originPoint","transformAxes","boxDistortingKeys","transformProps","sortTransformProps","indexOf","operationKey","isDistorting","axesKey","transformPropSet","isTransformProp","transformOriginProps","isTransformOriginProp","translateAlias","buildLayoutProjectionTransform","treeScale","identityProjection","isCSSVariable","isCSSVariable$1","cssVariableRegex","getVariableValue","match","exec","parseCSSVariable","token","fallback","window","getComputedStyle","getPropertyValue","trim","pixelsToPercent","pixels","axis","borderCorrectionDefinition","process","viewportBox","valueScaleCorrection","applyTo","boxShadow","_viewportBox","original","containsCSSVariables","includes","cssVariables","replace","shadow","template","createTransformer","xScale","yScale","averageScale","output","i_1","cssVariable","buildHTMLStyles","style","vars","transformOrigin","transformKeys","isLayoutProjectionEnabled","deltaFinal","targetBox","enableHardwareAcceleration","transformTemplate","allowTransformNone","hasTransform","hasTransformOrigin","transformIsNone","valueType","valueAsType","bucket","corrected","num","transformString","sort","numTransformKeys","buildBoxDistortingTransforms","buildLayoutProjectionTransformOrigin","transformIsDefault","transformHasZ","buildTransform","buildTransformOrigin","resetAxis","originAxis","scalePoint","point","applyPointDelta","boxScale","applyAxisDelta","applyBoxDelta","applyAxisTransforms","final","transforms","scaleKey","originKey","axisOrigin","xKeys","yKeys","removePointDelta","removeAxisTransforms","removeAxisDelta","isNear","maxDistance","calcLength","calcOrigin","source","sourceLength","targetLength","updateAxisDelta","updateBoxDelta","eachAxis","getBoundingBox","transformPagePoint","transformPoint","topLeft","bottomRight","transformBoundingBox","getBoundingClientRect","BoundingBoxDimension","positionalKeys","isPositionalKey","setAndResetVelocity","isNumOrPxType","getPosFromMatrix","matrix","pos","split","getTranslateFromMatrix","pos2","pos3","_bbox","matrix3d","nonTranslationalTransformKeys","positionalValues","checkAndConvertChangedValueTypes","targetPositionalKeys","removedTransformValues","hasAttemptedToRemoveTransformValues","changedValueTypeKeys","toType","fromType","numKeyframes","removedTransforms","removeNonTranslationalTransform","convertedTarget","changedKeys","originBbox","elementComputedStyle","display","originComputedStyle","targetBbox","convertChangedValueTypes","unitConversion","some","hasPositionalKey","parseDomVariant","HTMLElement","resolveCSSVariables","HTMLVisualElement","_super","arguments","defaultConfig","reactStyle","layoutUpdateListeners","layoutMeasureListeners","viewportBoxUpdateListeners","hasViewportBoxUpdated","targetBoxFinal","prevTreeScale","deltaTransform","stopLayoutAxisAnimation","isTargetBoxLocked","axisProgress","updateLayoutDeltas","fireUpdateLayoutDelta","clean","read","layoutOrigin","defaultValueType","parseDOMValues","transformValues","parsed","enableLayoutProjection","hide","isVisible","show","onLayoutUpdate","onLayoutMeasure","onViewportBoxUpdate","layoutReady","prevViewportBox","getBoundingBoxWithoutTransforms","bbox","snapshotBoundingBox","rebaseTargetBox","force","shouldRebase","setAxisTarget","measureLayout","boxCorrected","lockTargetBox","unlockTargetBox","stopLayoutAnimation","resetTransform","targetAxis","startLayoutAxisAnimation","progress","animateMotionValue","originBox","parentTreeScale","parentDelta","treeLength","applyTreeDeltas","updateTransformDeltas","finalBox","build","visibility","assign","setProperty","useConstant","calcOrigin$1","progressToPixels","dashKeys","array","camelKeys","unmeasured","buildSVGAttrs","attrs","dimensions","totalPathLength","attrX","attrY","pathLength","pathSpacing","pathOffset","calcSVGTransformOrigin","totalLength","spacing","useDashCase","buildSVGPath","camelCaseAttributes","CAMEL_CASE_PATTERN","camelToDash","str","toLowerCase","SVGVisualElement","measure","getBBox","e","tagName","getTotalLength","getAttribute","setAttribute","svgTagNames","isSVGComponent","Component","PresenceContext","MotionContext","variantContext","useVariantContext","useVisualElementContext","validMotionProps","isValidMotionProp","isPropValid","emotionIsPropValid_1","isMotionValue","isForcedMotionValue","layout","layoutId","addMotionValues","isStyle","props","foundMotionValue","reservedNames","Presence","VisibilityAction","empty","MotionConfigContext","p","features","isStatic","checkShouldInheritVariant","animate","inherit","defaultHandler","sortByDepth","createBatcher","queue","flush","order","isPresent","presence","Present","isSharedLayout","context","forceUpdate","SharedLayoutContext","useIsomorphicLayoutEffect","usePresence","onExitComplete","register","id","useUniqueId","counter","incrementId","useInitialOrEveryRender","isInitialOnly","isInitialRender","isVariantLabel$1","isAnimationControls","createMotionComponent","defaultFeatures","useVisualElement","isForced","existsAsProp","existsAsStyle","propIsMotionValue","styleIsMotionValue","useMotionValues","initial","whileTap","whileHover","parentInitial","parentAnimate","presenceContext","controlsVariants","isVariantNode","initialToApply","useVariants","plugins","allFeatures","numFeatures","shouldRender","getComponent","useFeatures","component","syncLayout","remove","useSnapshotOnUnmount","Provider","createLock","name","lock","globalHorizontalLock","globalVerticalLock","getGlobalLock","drag","openHorizontal_1","openVertical_1","addDomEvent","eventName","addEventListener","removeEventListener","isMouseEvent","event","PointerEvent","pointerType","MouseEvent","isTouchEvent","touches","defaultPagePoint","pageX","pageY","pointFromTouch","pointType","changedTouches","pointFromMouse","extractEventInfo","getViewportPointFromEvent","wrapHandler","shouldFilterPrimaryPointer","eventHandler","listener","button","isBrowser$1","mouseEventNames","pointerdown","pointermove","pointerup","pointercancel","pointerover","pointerout","pointerenter","pointerleave","touchEventNames","getPointerEventName","onpointerdown","ontouchstart","onmousedown","addPointerEvent","usePointerEvent","useDomEvent","PanSession","handlers","startEvent","lastMoveEvent","lastMoveEventInfo","updatePoint","info","getPanInfo","history","isPanStarted","isDistancePastThreshold","onStart","onMove","handlePointerMove","buttons","handlePointerUp","end","onEnd","panInfo","initialInfo","onSessionStart","removeListeners","updateHandlers","subtractPoint","lastDevicePoint","startDevicePoint","getVelocity$1","timestampedPoint","lastPoint","time","currentVelocity","Infinity","applyConstraints","elastic","calcRelativeAxisConstraints","calcViewportAxisConstraints","layoutAxis","constraintsAxis","lastPointerEvent","elementDragControls","WeakMap","VisualElementDragControls","isDragging","currentDirection","constraints","hasMutatedConstraints","cursorProgress","openGlobalLock","panSession","originEvent","snapToCursor","stopMotion","dragPropagation","prepareBoundingBox","resolveDragConstraints","axisValue","getAxisMotionValue","onDragStart","dragDirectionLock","lockThreshold","direction","abs","getCurrentDirection","onDirectionLock","updateAxis","onDrag","layoutBox","dragConstraints","resolveRefConstraints","relativeConstraints","onMeasureDragConstraints","constraintsElement","constraintsBox","measuredConstraints","calcViewportConstraints","userConstraints","convertAxisBoxToBoundingBox","cancelDrag","dragMomentum","dragElastic","onDragEnd","animateDragEnd","length_1","center","updateVisualElementAxis","shouldDrag","updateAxisMotionValue","nextValue","axisLayout","axisLength","calcConstrainedMinPoint","updateProps","_f","_g","remainingProps","dragKey","toUpperCase","dragTransition","momentumAnimations","bounceStiffness","bounceDamping","inertia","timeConstant","startAxisValueAnimation","onDragTransitionEnd","currentValue","boxProgress","calcPositionFromProgress","stopPointerListener","dragListener","stopResizeListener","stopLayoutUpdateListener","prevSnapshot","makeRenderlessComponent","hook","groupDragControls","dragControls","useDrag","Drag","useUnmountEffect","order$1","getGesturePriority","gesture","tapGesturePriority","hoverPriority","filterTouch","useGestures","onPan","onPanStart","onPanEnd","onPanSessionStart","hasPanEvents","onTap","onTapStart","onTapCancel","hasTapListeners","isTapping","cancelPointerEventListener","removePointerUp","onPointerUp","openGestureLock","isNodeOrChild","parentElement","useTapGesture","onHoverStart","onHoverEnd","useHoverGesture","gestureProps","GestureComponent","Gestures","AnimationControls","hasMounted","pendingAnimations","subscribers","animations_1","ExitComponent","exit","isPlayingExitAnimation","Exit","targetWithoutTransition","mergeTransitionEnd","resolveVariantLabels","unresolvedVariant","defaultTransition","prevValues","targetToAnimate","animatingTarget","finalTarget","shouldAnimateOnMount","isValidValue","valueHasUpdated","prevLength","shallowCompare","useAnimateProp","targetVariants","parentAlreadyMounted","oldVariant","newVariant","shouldAnimate","join","useVariantAnimations","unsubscribe","useAnimationGroupSubscription","Animation","Animate","frameTarget","stopAxisAnimation","visibilityAction","shouldStackAnimate","safeToRemove","boxHasMoved","hasMoved","animateAxis","Hide","onLayoutAnimationComplete","componentDidMount","unsubLayoutReady","componentWillUnmount","crossfadeOpacity","crossfade","layoutProgress","createCrossfadeAnimation","frame","tweenAxis","unsubscribeProgress","easeCrossfadeIn","easeCrossfadeOut","AnimateLayoutContextProvider","hasAxisMoved","compress","easing","AnimateLayout","Measure","getSnapshotBeforeUpdate","syncUpdate","componentDidUpdate","MeasureContextProvider","createElement","MeasureLayout","allMotionFeatures","domBaseConfig","presenceId","isPresenceRoot","forwardedProps","domProps","filterProps","visualProps","buildSVGProps","htmlProps","draggable","userSelect","touchAction","buildHTMLProps","createMotionProxy","componentCache","Proxy","motion","getPresenceId","PresenceChild","_onExitComplete","presenceAffectsLayout","presenceChildren","newChildrenMap","childId","allComplete","isComplete","getChildKey","AnimatePresence","exitBeforeEnter","forceRender","unloadingRef","forcedRenderCount","setForcedRenderCount","useForceUpdate","layoutContext","filteredChildren","filtered","onlyElements","presentChildren","allChildren","exiting","updateChildLookup","childrenToRender","presentKeys","targetKeys","numPresent","insertionIndex","splice","removeIndex","findIndex","presentChild","createSwitchAnimation","stack","lead","Entering","prevLead","Show","getFollowOrigin","Exiting","getFollowTarget","stackLead","stackLeadPresence","follow","getLeadTransition","getLeadTarget","getLeadOrigin","LayoutStack","hasChildren","snapshot","boundingBox","latestMotionValues","stackChild","updateLeadAndFollow","prevFollow","leadIndex","numInStack","lastIsPresent","findLeadAndFollow","updateSnapshot","isLeadPresent","AnimateSharedLayout","stacks","updateScheduled","renderScheduled","syncContext","scheduleUpdate","addChild","removeChild","updateStacks","startLayoutAnimation","shouldComponentUpdate","createAnimation","getStack","addToStack","removeFromStack","createScrollMotionValues","scrollX","scrollY","scrollXProgress","scrollYProgress","prefersReducedMotion","matchMedia","motionMediaQuery_1","setReducedMotionPreferences","matches","addListener","DragControls","componentControls","nativeEvent","updateConstraints","StateVisualElement","initialState"],"mappings":"2FAAA,2JAOIA,EAAc,SAAqBC,GACrC,MAAsB,iBAARA,GAAoBA,EAAIC,eAAe,YAOnDC,EAEJ,WACE,SAASA,IACPC,KAAKC,cAAgB,IAAIC,IA4C3B,OAzCAH,EAAoBI,UAAUC,IAAM,SAAUC,GAC5C,IAAIC,EAAQN,KAGZ,OADAA,KAAKC,cAAcG,IAAIC,GAChB,WACOC,EAAML,cAAcM,OAAOF,KAI3CN,EAAoBI,UAAUK,OAAS,SAKvCC,EAAGC,EAAGC,GACJ,IAAIC,EAAKC,EAET,GAAKb,KAAKC,cAAca,KAExB,IACE,IAAK,IAAIC,EAAK,YAASf,KAAKC,eAAgBe,EAAKD,EAAGE,QAASD,EAAGE,KAAMF,EAAKD,EAAGE,OAAQ,EAEpFZ,EADcW,EAAGG,OACTV,EAAGC,EAAGC,IAEhB,MAAOS,GACPR,EAAM,CACJS,MAAOD,GAET,QACA,IACMJ,IAAOA,EAAGE,OAASL,EAAKE,EAAGO,SAAST,EAAGU,KAAKR,GAChD,QACA,GAAIH,EAAK,MAAMA,EAAIS,SAKzBtB,EAAoBI,UAAUqB,MAAQ,WACpCxB,KAAKC,cAAcuB,SAGdzB,EA9CT,GA2DI0B,EAEJ,WASE,SAASA,EAAYC,GACnB,IAtB2BP,EAsBvBb,EAAQN,KAQZA,KAAK2B,UAAY,EAOjB3B,KAAK4B,YAAc,EAOnB5B,KAAK6B,kBAAoB,IAAI9B,EAO7BC,KAAK8B,kBAAoB,IAAI/B,EAS7BC,KAAK+B,kBAAmB,EAExB/B,KAAKgC,gBAAkB,SAAUC,EAAGC,QACnB,IAAXA,IACFA,GAAS,GAGX5B,EAAM6B,KAAO7B,EAAM8B,QACnB9B,EAAM8B,QAAUH,EAEZ3B,EAAM6B,OAAS7B,EAAM8B,SACvB9B,EAAMuB,kBAAkBrB,OAAOF,EAAM8B,SAGnCF,GACF5B,EAAMwB,kBAAkBtB,OAAOF,EAAM8B,SAIvC,IAAIvB,EAAK,cACLwB,EAAQxB,EAAGwB,MACXC,EAAYzB,EAAGyB,UAEfhC,EAAMsB,cAAgBU,IACxBhC,EAAMqB,UAAYU,EAClB/B,EAAMsB,YAAcU,EACpB,IAAKC,WAAWjC,EAAMkC,yBAa1BxC,KAAKwC,sBAAwB,WAC3B,OAAO,IAAKD,WAAWjC,EAAMmC,gBAa/BzC,KAAKyC,cAAgB,SAAU5B,GACbA,EAAGyB,YAEDhC,EAAMsB,cACtBtB,EAAM6B,KAAO7B,EAAM8B,UAIvBpC,KAAK0C,IAAIhB,GAAM,GACf1B,KAAK+B,kBA1HsBZ,EA0HKnB,KAAKoC,SAzH/BO,MAAMC,WAAWzB,KA2WzB,OAhKAM,EAAYtB,UAAU0C,SAAW,SAAUC,GACzC,OAAO9C,KAAK6B,kBAAkBzB,IAAI0C,IAGpCrB,EAAYtB,UAAU4C,eAAiB,WACrC/C,KAAK6B,kBAAkBL,SAYzBC,EAAYtB,UAAU6C,gBAAkB,SAAUF,GAGhD,OADAA,EAAa9C,KAAKiD,OACXjD,KAAK8B,kBAAkB1B,IAAI0C,IASpCrB,EAAYtB,UAAU+C,OAAS,SAAUC,GACvCnD,KAAKmD,cAAgBA,GAmBvB1B,EAAYtB,UAAUuC,IAAM,SAAUT,EAAGC,QACxB,IAAXA,IACFA,GAAS,GAGNA,GAAWlC,KAAKmD,cAGnBnD,KAAKmD,cAAclB,EAAGjC,KAAKgC,iBAF3BhC,KAAKgC,gBAAgBC,EAAGC,IAc5BT,EAAYtB,UAAU8C,IAAM,WAC1B,OAAOjD,KAAKoC,SAOdX,EAAYtB,UAAUiD,YAAc,WAClC,OAAOpD,KAAKmC,MAWdV,EAAYtB,UAAUkD,YAAc,WAElC,OAAOrD,KAAK+B,iBACZ,YAAkBa,WAAW5C,KAAKoC,SAAWQ,WAAW5C,KAAKmC,MAAOnC,KAAK2B,WAAa,GAgBxFF,EAAYtB,UAAUmD,MAAQ,SAAUC,GACtC,IAAIjD,EAAQN,KAGZ,OADAA,KAAKwD,OACE,IAAIC,SAAQ,SAAUC,GAC3BpD,EAAMqD,cAAgBJ,EAAUG,MAC/BE,MAAK,WACN,OAAOtD,EAAMuD,qBAUjBpC,EAAYtB,UAAUqD,KAAO,WACvBxD,KAAK2D,eAAe3D,KAAK2D,gBAC7B3D,KAAK6D,kBASPpC,EAAYtB,UAAU2D,YAAc,WAClC,QAAS9D,KAAK2D,eAGhBlC,EAAYtB,UAAU0D,eAAiB,WACrC7D,KAAK2D,cAAgB,MAavBlC,EAAYtB,UAAU4D,QAAU,WAC9B/D,KAAK6B,kBAAkBL,QACvBxB,KAAK8B,kBAAkBN,QACvBxB,KAAKwD,QAGA/B,EAhWT,GAuWA,SAASuC,EAAYtC,GACnB,OAAO,IAAID,EAAYC,GAUzB,IAAIuC,EAAwB,SAA+BC,GACzD,OAAiB,IAAVA,GAGLC,EAAe,CACjBC,OAAQ,IACRC,OAAQ,IACRC,UAAW,IACXC,QAAS,IACTC,OAAQ,IACRC,UAAW,IACXC,QAAS,IACTC,OAAQ,IACRC,UAAW,IACXC,QAAS,IACTC,WAAY,IACZC,SAAU,IACVC,YAAa,IACbC,UAAW,KAGTC,EAA6B,SAAoCC,GACnE,GAAIC,MAAMC,QAAQF,GAAa,CAE7B,YAAgC,IAAtBA,EAAWG,OAAc,2DAEnC,IAAIzE,EAAK,YAAOsE,EAAY,GACxBI,EAAK1E,EAAG,GACR2E,EAAK3E,EAAG,GACR4E,EAAK5E,EAAG,GACR6E,EAAK7E,EAAG,GAEZ,OAAO,YAAY0E,EAAIC,EAAIC,EAAIC,GAC1B,MAA0B,iBAAfP,GAEhB,iBAAuCQ,IAA7BxB,EAAagB,GAA2B,wBAA0BA,EAAa,KAClFhB,EAAagB,IAGfA,GAiBLS,EAAe,SAAsBC,EAAK1E,GAE5C,MAAY,WAAR0E,MAIiB,iBAAV1E,IAAsBiE,MAAMC,QAAQlE,OAE1B,iBAAVA,IACX,IAAQ2E,KAAK3E,IACZA,EAAM4E,WAAW,WAQhBC,EAAoB,SAA2B/D,GACjD,OAAOmD,MAAMC,QAAQpD,IAGnBgE,EAAoB,WACtB,MAAO,CACLC,KAAM,SACNC,UAAW,IACXC,QAAS,GACTC,UAAW,GACXC,UAAW,KAIXC,EAAmB,SAA0BC,GAC/C,MAAO,CACLN,KAAM,SACNC,UAAW,IACXC,QAAgB,IAAPI,EAAW,IAAM,GAC1BH,UAAW,IACXC,UAAW,KAIXG,EAAc,WAChB,MAAO,CACLP,KAAM,YACNQ,KAAM,SACNC,SAAU,KAIVC,EAAY,SAAmBC,GACjC,MAAO,CACLX,KAAM,YACNS,SAAU,GACVE,OAAQA,IAIRC,EAAqB,CACvBC,EAAGd,EACHe,EAAGf,EACHgB,EAAGhB,EACHiB,OAAQjB,EACRkB,QAASlB,EACTmB,QAASnB,EACToB,QAASpB,EACTqB,OAAQf,EACRgB,OAAQhB,EACRiB,MAAOjB,EACPkB,QAAShB,EACTiB,gBAAiBjB,EACjBkB,MAAOlB,EACPmB,QAASrB,GA0CX,SAASsB,EAAoChH,GAC3C,IAAIiH,EAAOjH,EAAGiH,KACVC,EAAOlH,EAAGkH,KACVC,EAAOnH,EAAGmH,KACVtB,EAAO7F,EAAG6F,KACVuB,EAAQpH,EAAGoH,MACXC,EAAa,YAAOrH,EAAI,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,UAEzDsH,EAAU,YAAS,GAAID,GA0C3B,OAxCID,IACFE,EAAQC,OAASH,GAOfC,EAAWvB,WAAUwB,EAAkB,SAAIlE,EAAsBiE,EAAWvB,WAC5EuB,EAAWG,cAAaF,EAAQE,YAAcpE,EAAsBiE,EAAWG,cAK/E3B,IACFyB,EAAc,KAzJE,SAAuBzB,GACzC,OAAOtB,MAAMC,QAAQqB,IAA4B,iBAAZA,EAAK,GAwJtB4B,CAAc5B,GAAQA,EAAK6B,IAAIrD,GAA8BA,EAA2BwB,IAOpF,UAApBwB,EAAWhC,OAAkBiC,EAAQjC,KAAO,aAE5C4B,EACFK,EAAQK,WAAa,UACZT,EACTI,EAAQK,WAAa,OACZR,IACTG,EAAQK,WAAa,UAGvBL,EAAQM,OAASV,GAAQD,GAAQE,GAAQE,EAAWO,OAO5B,WAApBP,EAAWhC,OAAmBiC,EAAQjC,KAAO,aAC1CiC,EAsBT,SAASO,EAA6BR,EAAYC,EAAStC,GACzD,IAAIhF,EAhHmD8H,EAAUnC,EAC7DoC,EA8HJ,OAbIxD,MAAMC,QAAQ8C,EAAQ3B,MACO,QAA9B3F,EAAKqH,EAAWvB,gBAA6B,IAAP9F,IAAqBqH,EAAWvB,SAAW,KAbtF,SAA0BwB,GACpB/C,MAAMC,QAAQ8C,EAAQ3B,KAAyB,OAAlB2B,EAAQ3B,GAAG,KAC1C2B,EAAQ3B,GAAK,YAAS2B,EAAQ3B,IAC9B2B,EAAQ3B,GAAG,GAAK2B,EAAQU,MAa1BC,CAAiBX,GAlGnB,SAA6BtH,GAChBA,EAAGkI,KACFlI,EAAGmI,MACKnI,EAAGoI,cACDpI,EAAGqI,gBACFrI,EAAGsI,iBACbtI,EAAG4H,OACC5H,EAAG2H,WACF3H,EAAGwH,YACVxH,EAAGgI,KARd,IASIX,EAAa,YAAOrH,EAAI,CAAC,OAAQ,QAAS,gBAAiB,kBAAmB,mBAAoB,SAAU,aAAc,cAAe,SAE7I,QAASuI,OAAOC,KAAKnB,GAAY5C,OA2F5BgE,CAAoBpB,KACvBA,EAAa,YAAS,YAAS,GAAIA,IA5HkBS,EA4HgB9C,EA5HNW,EA4HW2B,EAAQ3B,GAxHlFoC,EADE5C,EAAkBQ,GACAI,EAEAE,EAAmB6B,IAAa7B,EAAmBc,QAGlE,YAAS,CACdpB,GAAIA,GACHoC,EAAkBpC,OAoHd,YAAS,YAAS,GAAI2B,GAAUN,EAAoCK,IA4E7E,SAASqB,EAAe1D,EAAK1E,EAAOqI,EAAQtB,GAK1C,YAJmB,IAAfA,IACFA,EAAa,IAGR/G,EAAMmC,OAAM,SAAUmG,GAC3B,IAAIC,EACAC,EACApG,EA7ER,SAAsBsC,EAAK1E,EAAOqI,EAAQtB,EAAYuB,GACpD,IAAI5I,EAEA+I,EAuDN,SAA4B1B,EAAYrC,GACtC,OAAOqC,EAAWrC,IAAQqC,EAAoB,SAAKA,EAxD7B2B,CAAmB3B,EAAYrC,GACjDiE,EAAyC,QAA/BjJ,EAAK+I,EAAgBf,YAAyB,IAAPhI,EAAgBA,EAAKM,EAAM8B,MAC5E8G,EAAqBnE,EAAaC,EAAK2D,GAM5B,SAAXM,GAAqBC,GAAwC,iBAAXP,IACpDM,EAAS,IAAQE,kBAAkBR,IAGrC,IAAIS,EAAqBrE,EAAaC,EAAKiE,GAwC3C,OAvCA,YAAQG,IAAuBF,EAAoB,6BAA+BlE,EAAM,UAAaiE,EAAS,SAAaN,EAAS,MAASM,EAAS,8DAAgEA,EAAS,6BAA+BN,EAAS,8BAuC/PS,GAAuBF,IAA+C,IAAzBH,EAAgB1D,KArCrE,WACE,IAAIiC,EAAU,CACZU,KAAMiB,EACNtD,GAAIgD,EACJU,SAAU/I,EAAMkC,cAChBoG,WAAYA,EACZU,SAAU,SAAkBlI,GAC1B,OAAOd,EAAMuB,IAAIT,KAGrB,MAAgC,YAAzB2H,EAAgB1D,MAA+C,UAAzB0D,EAAgB1D,KAAmB,YAAQ,YAAS,YAAS,GAAIiC,GAAUyB,IAAoB,YAAU,YAAS,YAAS,GAAIlB,EAA6BkB,EAAiBzB,EAAStC,IAAO,CACxOsE,SAAU,SAAkBlI,GAC1B,IAAIpB,EAEJsH,EAAQgC,SAASlI,GACmB,QAAnCpB,EAAK+I,EAAgBO,gBAA6B,IAAPtJ,GAAyBA,EAAGU,KAAKqI,EAAiB3H,IAEhGwH,WAAY,WACV,IAAI5I,EAEJsH,EAAQsB,aAC8B,QAArC5I,EAAK+I,EAAgBH,kBAA+B,IAAP5I,GAAyBA,EAAGU,KAAKqI,QAKrF,WACE,IAAI/I,EAKJ,OAHAM,EAAMuB,IAAI8G,GACVC,IACwG,QAAvG5I,EAAK+I,aAAyD,EAASA,EAAgBH,kBAA+B,IAAP5I,GAAyBA,EAAGU,KAAKqI,GAC1I,CACLpG,KAAM,eA0BQ4G,CAAavE,EAAK1E,EAAOqI,EAAQtB,EAAYuB,GACzDT,EApHR,SAAgCd,EAAYrC,GAC1C,IAAIhF,EAAIE,EAAIC,EAAIqJ,EAAIC,EAEpB,OAAmQ,QAA3PA,EAAwM,QAAlMD,EAAqF,QAA/EtJ,EAAgC,QAA1BF,EAAKqH,EAAWrC,UAAyB,IAAPhF,OAAgB,EAASA,EAAGmI,aAA0B,IAAPjI,EAAgBA,EAAsC,QAAhCC,EAAKkH,EAAoB,eAAsB,IAAPlH,OAAgB,EAASA,EAAGgI,aAA0B,IAAPqB,EAAgBA,EAAKnC,EAAWc,aAA0B,IAAPsB,EAAgBA,EAAK,EAiHlRC,CAAuBrC,EAAYrC,GAE3CvC,EAAQ,WACV,OAAOqG,EAAWpG,KASpB,OANIyF,EACFU,EAAac,WAAWlH,EAAOW,EAAsB+E,IAErD1F,IAGK,WACLmH,aAAaf,GACbC,SAAoDA,EAASnG,WAKnE,IAIIkH,EAA+B,SAAsCzI,GAEvE,OAAO+D,EAAkB/D,GAAKA,EAAEA,EAAEqD,OAAS,IAAM,EAAIrD,GA2BnD0I,EAAM,YAAS,YAAS,GAAI,KAAS,CACvCC,UAAWC,KAAKC,QAOdC,EAAoB,CAEtBpD,MAAO,IACPD,gBAAiB,IACjBsD,aAAc,IACdC,KAAM,IACNC,OAAQ,IAERC,YAAa,IACbC,eAAgB,IAChBC,iBAAkB,IAClBC,kBAAmB,IACnBC,gBAAiB,IACjBC,YAAa,IACbC,eAAgB,IAChBC,iBAAkB,IAClBC,kBAAmB,IACnBC,gBAAiB,IACjBC,aAAc,IACdC,OAAQ,IACRC,oBAAqB,IACrBC,qBAAsB,IACtBC,wBAAyB,IACzBC,uBAAwB,IAExBC,MAAO,IACPC,SAAU,IACVC,OAAQ,IACRC,UAAW,IACXxL,KAAM,IACNyL,IAAK,IACLC,MAAO,IACPC,OAAQ,IACRC,KAAM,IAENC,QAAS,IACTC,WAAY,IACZC,aAAc,IACdC,cAAe,IACfC,YAAa,IACbC,OAAQ,IACRC,UAAW,IACXC,YAAa,IACbC,aAAc,IACdC,WAAY,IAEZlG,OAAQ,IACRC,QAAS,IACTC,QAAS,IACTC,QAAS,IACTG,MAAO,IACPF,OAAQ,IACRC,OAAQ,IACR8F,OAAQ,IACRC,KAAM,IACNC,MAAO,IACPC,MAAO,IACPC,SAAU,IACVC,WAAY,IACZC,WAAY,IACZC,WAAY,IACZ7G,EAAG,IACHC,EAAG,IACHC,EAAG,IACH4G,YAAa,IACbC,qBAAsB,IACtBrG,QAAS,IACTsG,QAAS,IACTC,QAAS,IACTC,QAAS,IAETC,OAAQvD,EAERwD,YAAa,IACbC,cAAe,IACfC,WAAY1D,GAMV2D,EAAsB,CAAC,IAAQ,IAAI,IAAS,IAAS,IAAI,IArGlD,CACTxI,KAAM,SAAc7D,GAClB,MAAa,SAANA,GAETsM,MAAO,SAAetM,GACpB,OAAOA,KAqGPuM,EAAgB,SAAuBvM,GACzC,OAAO,SAAUiE,GACf,OAAOA,EAAKJ,KAAK7D,KAQjBwM,EAAyB,SAAgCxM,GAC3D,OAAOqM,EAAoBI,KAAKF,EAAcvM,KAO5C0M,EAAa,YAASL,EAAqB,CAAC,IAAO,MAMnDM,EAAgB,SAAuB3M,GACzC,OAAO0M,EAAWD,KAAKF,EAAcvM,KAOnC4M,EAAsB,SAA6BhJ,GACrD,OAAOkF,EAAkBlF,IAOvBiJ,EAAiB,SAAwB3N,EAAO+E,GAClD,OAAOA,GAAyB,iBAAV/E,EAAqB+E,EAAK0E,UAAUzJ,GAASA,GAerE,SAAS4N,EAAgB9M,GACvB,OAAOmD,MAAMC,QAAQpD,GAOvB,SAAS+M,EAAe/M,GACtB,MAAoB,iBAANA,GAAkB8M,EAAgB9M,GA+BlD,SAASgN,EAAeC,EAAeC,EAASC,GAC9C,IAAIC,EAAW,GAEf,OAAKF,GAKHE,EAxDJ,SAA2BF,GACzB,MAA0B,mBAAZA,EAoDHG,CAAkBH,GAChBA,EAAQC,QAAuCA,EAASF,EAAcK,oBA9BrF,SAAoBL,GAClB,IAAI9M,EAAU,GAId,OAHA8M,EAAcM,cAAa,SAAUrO,EAAO0E,GAC1C,OAAOzD,EAAQyD,GAAO1E,EAAM8B,SAEvBb,EAyBiGqN,CAAWP,GAlBrH,SAAqBA,GACnB,IAAIhF,EAAW,GAIf,OAHAgF,EAAcM,cAAa,SAAUrO,EAAO0E,GAC1C,OAAOqE,EAASrE,GAAO1E,EAAMkC,iBAExB6G,EAa4H7G,CAAY6L,IAElIC,EAGN,YAAS,CACdjH,WAAYgH,EAAcQ,wBACzBL,IATMA,EAiBX,SAASM,EAAeT,EAAerJ,EAAK1E,GACtC+N,EAAcU,SAAS/J,GACzBqJ,EAAcW,SAAShK,GAAKnD,IAAIvB,GAEhC+N,EAAcY,SAASjK,EAAK7B,EAAY7C,IAI5C,SAAS4O,EAAUb,EAAe/J,EAAYtE,GAC5C,IAAImP,QAAmB,IAAPnP,EAAgB,GAAKA,GAAImP,SAErCjP,EAAKmO,EAAce,qBAAqBhB,EAAeC,EAAe/J,IAAa,GACnFnE,EAAKD,EAAGmP,cACRA,OAAuB,IAAPlP,EAAgB,GAAKA,EAErCwI,GADazI,EAAGmH,WACP,YAAOnH,EAAI,CAAC,gBAAiB,gBAI1C,IAAK,IAAI8E,KAFT2D,EAAS,YAAS,YAAS,GAAIA,GAAS0G,GAEhB,CACtB,IAAI/O,EAAQuJ,EAA6BlB,EAAO3D,IAChD8J,EAAeT,EAAerJ,EAAK1E,GAC9B6O,IAAUd,EAAciB,WAAWtK,GAAO1E,IAInD,SAASiP,EAAYlB,EAAemB,GACb,YAASA,GAAeC,UAE9BC,SAAQ,SAAU1K,GAC/B,IAAIhF,EAEJkP,EAAUb,EAAeA,EAAcsB,WAAW3K,IACT,QAAxChF,EAAKqO,EAAcuB,uBAAoC,IAAP5P,GAAyBA,EAAG0P,SAAQ,SAAUG,GAC7FN,EAAYM,EAAOL,SAKzB,SAASM,EAAUzB,EAAe/J,GAChC,OAAIC,MAAMC,QAAQF,GACTiL,EAAYlB,EAAe/J,GACH,iBAAfA,EACTiL,EAAYlB,EAAe,CAAC/J,SAEnC4K,EAAUb,EAAe/J,GAI7B,SAASyL,EAAwB1B,EAAe1F,EAAQM,GACtD,IAAIjJ,EAAIE,EAEJC,EAEA6P,EAAezH,OAAOC,KAAKG,GAAQsH,QAAO,SAAUjL,GACtD,OAAQqJ,EAAcU,SAAS/J,MAE7BkL,EAAeF,EAAavL,OAChC,GAAKyL,EAEL,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAcC,IAAK,CACrC,IAAInL,EAAMgL,EAAaG,GACnBC,EAAczH,EAAO3D,GACrB1E,EAAQ,KAUZ,GAPIiE,MAAMC,QAAQ4L,KAChB9P,EAAQ8P,EAAY,IAMR,OAAV9P,EAAgB,CAClB,IAAI+P,EAAmC,QAAtBrQ,EAAKiJ,EAAOjE,UAAyB,IAAPhF,EAAgBA,EAAKqO,EAAciC,gBAAgBtL,GAClG1E,OAAsBwE,IAAduL,EAA0BA,EAAY1H,EAAO3D,GACrD,YAAoB,OAAV1E,EAAgB,yBAA4B0E,EAAM,mDAAuDA,EAAM,kCAGtG,iBAAV1E,GArTN,iBAAiB2E,KAqT6B3E,GAEjDA,EAAQyB,WAAWzB,IACTyN,EAAczN,IAAU,IAAQ2E,KAAKmL,KAE/C9P,EAAQ,IAAQ6I,kBAAkBiH,IAGpC/B,EAAcY,SAASjK,EAAK7B,EAAY7C,IACV,QAA7BJ,GAAMC,EAAK8I,GAAQjE,UAAyB,IAAP9E,IAAqBC,EAAG6E,GAAO1E,GACrE+N,EAAciB,WAAWtK,GAAO1E,GAIpC,SAASiQ,EAAwBvL,EAAKqC,GACpC,GAAKA,EAEL,OADsBA,EAAWrC,IAAQqC,EAAoB,SAAKA,GAC3CW,KAGzB,SAASwI,EAAU7H,EAAQtB,EAAYgH,GACrC,IAAIrO,EAAIE,EAEJ+I,EAAS,GAEb,IAAK,IAAIjE,KAAO2D,EACdM,EAAOjE,GAA2D,QAAnDhF,EAAKuQ,EAAwBvL,EAAKqC,UAAgC,IAAPrH,EAAgBA,EAA4C,QAAtCE,EAAKmO,EAAcW,SAAShK,UAAyB,IAAP9E,OAAgB,EAASA,EAAGkC,MAG5K,OAAO6G,EAOT,SAASwH,EAA4BpC,EAAe/J,EAAYoM,GAU9D,IAAIhO,EAWJ,YApBa,IAATgO,IACFA,EAAO,IAGLA,EAAKvB,UACPd,EAAcsC,gBAAgBpR,IAAImR,EAAKvB,UAGzCd,EAAcuC,iBAAiBF,EAAKvB,UAIlCzM,EADEwL,EAAgB5J,GActB,SAA8B+J,EAAemB,EAAekB,GAC1D,IAAIG,EAAa,YAASrB,GAAeC,UAAU/H,KAAI,SAAUoJ,GAC/D,OAAOC,EAAe1C,EAAeyC,EAAOJ,MAG9C,OAAO9N,QAAQoO,IAAIH,GAlBLI,CAAqB5C,EAAe/J,EAAYoM,GACnDvC,EAAe7J,GACZyM,EAAe1C,EAAe/J,EAAYoM,GAE1CQ,EAAc7C,EAAe/J,EAAYoM,GAGvDrC,EAAc8C,mBACPzO,EAAUK,MAAK,WACpB,OAAOsL,EAAc+C,yBAYzB,SAASL,EAAe1C,EAAeyC,EAAOJ,GAC5C,IAAI1Q,EAEAmP,EAAWuB,GAAQA,EAAKvB,UAAY,EACpCkC,EAAoBhD,EAAcsB,WAAWmB,GAC7CxC,EAAUF,EAAeC,EAAegD,EAAmBX,GAAQA,EAAKnC,QACxElH,EAAaiH,EAAQjH,YAAc,GAMnCkC,EAAe8H,EAAoB,WACrC,OAAOH,EAAc7C,EAAeC,EAASoC,IAC3C,WACF,OAAO9N,QAAQC,WAObyO,GAAuE,QAA7CtR,EAAKqO,EAAckD,4BAAyC,IAAPvR,OAAgB,EAASA,EAAGC,MAAQ,SAAUuR,QAC1G,IAAjBA,IACFA,EAAe,GAGjB,IAAIxR,EAAKqH,EAAWe,cAEpB,OAsBJ,SAAyBiG,EAAeoD,EAAcrJ,EAAeC,EAAiBC,EAAkB6G,EAAUZ,QAC1F,IAAlBnG,IACFA,EAAgB,QAGM,IAApBC,IACFA,EAAkB,QAGK,IAArBC,IACFA,EAAmB,QAGJ,IAAb6G,IACFA,EAAW,GAGb,IAAI0B,EAAa,GACba,GAAsBrD,EAAckD,qBAAqBtR,KAAO,GAAKoI,EACrEsJ,EAA+C,IAArBrJ,EAAyB,SAAU6H,GAC/D,OAAOA,EAAI9H,GACT,SAAU8H,GACZ,OAAOuB,EAAqBvB,EAAI9H,GAUlC,OARA9D,MAAMyD,KAAKqG,EAAckD,sBAAsB7B,SAAQ,SAAUG,EAAOM,GACtE,IAAIzN,EAAYqO,EAAelB,EAAO4B,EAAc,CAClDtC,SAAUA,EACVhH,MAAOC,EAAgBuJ,EAAwBxB,GAC/C5B,OAAQA,IAEVsC,EAAWe,KAAKlP,MAEXE,QAAQoO,IAAIH,GAtDVgB,CAAgBxD,EAAeyC,QADX,IAAP9Q,EAAgB,EAAIA,GACqBwR,EAAcnK,EAAWgB,gBAAiBhB,EAAWiB,iBAAkB6G,EAAUuB,aAAmC,EAASA,EAAKnC,SAC7L,WACF,OAAO3L,QAAQC,WAObqF,EAAOb,EAAWa,KAEtB,GAAIA,EAAM,CACR,IAAIhI,EAAK,YAAgB,mBAATgI,EAA4B,CAACqB,EAAc+H,GAAyB,CAACA,EAAuB/H,GAAe,GACvHuI,EAAQ5R,EAAG,GACX6R,EAAO7R,EAAG,GAEd,OAAO4R,IAAQ/O,KAAKgP,GAEpB,OAAOnP,QAAQoO,IAAI,CAACzH,IAAgB+H,EAAsBZ,aAAmC,EAASA,EAAKvI,SA6C/G,SAAS+I,EAAc7C,EAAe/J,EAAYtE,GAChD,IAAIE,OAAY,IAAPF,EAAgB,GAAKA,EAC1BG,EAAKD,EAAGiI,MACRA,OAAe,IAAPhI,EAAgB,EAAIA,EAC5BqJ,EAAKtJ,EAAGiP,SACRA,OAAkB,IAAP3F,EAAgB,EAAIA,EAC/BwI,EAAqB9R,EAAG8R,mBACxBzD,EAASrO,EAAGqO,OAEZ0D,EAAsB7D,EAAeC,EAAe/J,EAAYiK,GAChEyD,IAAoBC,EAAoB5K,WAAa2K,GAEzD,IAAIvI,EAAK4E,EAAce,qBAAqB6C,GACxC5C,EAAgB5F,EAAG4F,cACnBhI,EAAaoC,EAAGpC,WAChBsB,EAAS,YAAOc,EAAI,CAAC,gBAAiB,eAEtC0F,IAAUd,EAAc6D,kBAAkB/C,GAAYxG,GAC1D,IAAIkI,EAAa,GAEjB,IAAK,IAAI7L,KAAO2D,EAAQ,CACtB,IAAIrI,EAAQ+N,EAAcW,SAAShK,GACnC,GAAK1E,GAAUqI,QAA0B7D,IAAhB6D,EAAO3D,GAAhC,CACA,IAAImN,EAAcxJ,EAAO3D,GAEpBmK,IACHd,EAAciB,WAAWtK,GAAO6E,EAA6BsI,IAG3D9D,EAAcpL,YAAYmP,IAAIpN,KAClCqJ,EAAcpL,YAAY1D,IAAIyF,GAC9B6L,EAAWe,KAAKlJ,EAAe1D,EAAK1E,EAAO6R,EAAa,YAAS,CAC/DhK,MAAOA,GACNd,OAGL,IAAIgL,EAAgBzP,QAAQoO,IAAIH,GAChC,OAAOxB,EAAgBgD,EAActP,MAAK,WACxC,OAAOmM,EAAUb,EAAegB,EAAe,CAC7CF,SAAUA,OAETkD,EAGP,SAASC,EAAYjE,EAAe/J,EAAYiO,GAC9C,IAAIvS,EAEJqO,EAAcmE,UAAUD,GAASjO,EACQ,QAAxCtE,EAAKqO,EAAcuB,uBAAoC,IAAP5P,GAAyBA,EAAG0P,SAAQ,SAAUG,GAC7FyC,EAAYzC,EAAOvL,EAAYiO,MAInC,SAASE,EAAcpE,EAAekE,GACpC,IAAIG,EAAWrE,EAAcmE,UAAUD,GAEvC,GAAIG,EACF,OAAOjC,EAA4BpC,EAAeqE,EAAU,CAC1DvD,SAAUoD,IAKhB,SAASI,EAActE,EAAekE,GACpC,IAAIvS,EAMJ,GAJ8C,QAA7CA,EAAKqO,EAAckD,4BAAyC,IAAPvR,GAAyBA,EAAG0P,SAAQ,SAAUG,GAClG8C,EAAc9C,EAAO0C,MAERlE,EAAcmE,UAAUD,GACvC,CACAlE,EAAcsC,gBAAgBjR,OAAO6S,GACrC,IAAIK,EAAUC,EAA2BxE,GAGzC,GAFAA,EAAcuC,mBAEVgC,EACoBvE,EAAcmE,UAAUI,IAC3BH,EAAcpE,EAAeuE,GAIlD,IAAIE,EAAiBzE,EAAc6D,kBAAkBK,GACrD,GAAKO,EAAL,CACA,IAAIC,EAAkB,GAEtB,IAAK,IAAI/N,KAAOqJ,EAAciB,gBACAxK,IAAxBgO,EAAe9N,KACjB+N,EAAgB/N,GAAOqJ,EAAciB,WAAWtK,IAIpDqJ,EAAc8C,mBACdD,EAAc7C,EAAe0E,GAAiBhQ,MAAK,WACjDsL,EAAc+C,2BAIlB,SAASyB,EAA2BxE,GAClC,OAAKA,EAAcsC,gBAAgB1Q,KAC5B+J,KAAKgJ,IAAIC,MAAMjJ,KAAM,YAASzF,MAAMyD,KAAKqG,EAAcsC,mBADd,EAalD,IAAIuC,GAEJ,WACE,SAASA,EAAcC,EAAQnU,GAC7B,IAAIS,EAAQN,KAGZA,KAAKiU,SAAW,IAAI/T,IAKpBF,KAAKmQ,WAAa,GAKlBnQ,KAAKqT,UAAY,GAKjBrT,KAAK+S,kBAAoB,GAKzB/S,KAAKwR,gBAAkB,IAAItR,IAK3BF,KAAK8D,YAAc,IAAI5D,IAEvBF,KAAKkU,OAAS,GAEdlU,KAAK6G,OAAS,IAAIsN,IAElBnU,KAAKoU,mBAAqB,IAAID,IAE9BnU,KAAKqU,OAAS,GACdrU,KAAKsU,WAAY,EAGjBtU,KAAKuU,OAAS,WACZ,OAAOjU,EAAM+T,OAAOlK,SAAS7J,EAAM4T,SAIrClU,KAAKwU,cAAgB,WACnB,OAAOlU,EAAM4B,UAKflC,KAAKH,IAAM,SAAU4U,GACnBA,EAAUnU,EAAMoU,MAAMD,GAAWnU,EAAMqU,UAClCrU,EAAMsU,cAEsB,mBAAtBtU,EAAMsU,YACftU,EAAMsU,YAAYH,GACT7U,EAAYU,EAAMsU,eAC3BtU,EAAMsU,YAAYxS,QAAUqS,KAKhCzU,KAAKgU,OAASA,EACdhU,KAAK6U,WAAab,EAASA,EAAOa,WAAa7U,KAC/CA,KAAK8U,SAAWd,EAAS,YAASA,EAAOc,SAAU,CAACd,IAAW,GAE/DhU,KAAK+U,MAAQf,EAASA,EAAOe,MAAQ,EAAI,EAGzC/U,KAAK4U,YAAc/U,EAgNrB,OA7MAkU,EAAc5T,UAAUoP,kBAAoB,WAC1C,OAAOvP,KAAKqU,OAAOjF,QAGrB2E,EAAc5T,UAAUqQ,WAAa,SAAUmB,GAC7C,IAAI9Q,EAEJ,OAAuC,QAA/BA,EAAKb,KAAKqU,OAAOW,gBAA6B,IAAPnU,OAAgB,EAASA,EAAG8Q,IAG7EoC,EAAc5T,UAAU8U,gBAAkB,SAAU/F,GAC7ClP,KAAKyQ,kBAAiBzQ,KAAKyQ,gBAAkB,IAAIvQ,KACtDF,KAAKyQ,gBAAgBrQ,IAAI8O,IAG3B6E,EAAc5T,UAAU+U,qBAAuB,SAAUhG,GAClDlP,KAAKoS,uBAAsBpS,KAAKoS,qBAAuB,IAAIlS,KAChEF,KAAKoS,qBAAqBhS,IAAI8O,IAGhC6E,EAAc5T,UAAU6R,iBAAmB,WACzC,IAAInR,EAAIE,EAEuC,QAA9CA,GAAMF,EAAKb,KAAKqU,QAAQrC,wBAAqC,IAAPjR,GAAyBA,EAAGQ,KAAKV,IAG1FkT,EAAc5T,UAAU8R,oBAAsB,WAC5C,IAAIpR,EAAIE,EAERf,KAAKsU,YAAgE,QAAjDvT,GAAMF,EAAKb,KAAKqU,QAAQpC,2BAAwC,IAAPlR,GAAyBA,EAAGQ,KAAKV,KAGhHkT,EAAc5T,UAAUuP,qBAAuB,WAC7C,OAAO1P,KAAKqU,OAAOnM,YAGrB6L,EAAc5T,UAAUsR,iBAAmB,SAAUzB,GACnD,IAAInP,OAEa,IAAbmP,IACFA,EAAW,GAGbhQ,KAAK8D,YAAYtC,QAGbwO,EAAW0D,EAA2B1T,OACxCA,KAAKmV,yBAAyBnF,GAGA,QAA/BnP,EAAKb,KAAKyQ,uBAAoC,IAAP5P,GAAyBA,EAAG0P,SAAQ,SAAUG,GACpF,OAAOA,EAAMe,iBAAiBzB,OAIlC+D,EAAc5T,UAAUgV,yBAA2B,SAAUnF,GAG3D,IAFA,IAAIoF,EAAepV,KAAKqT,UAAU/N,OAEzB0L,EAAIhB,EAAW,EAAGgB,EAAIoE,EAAcpE,IAAK,CAChD,IAAIqE,EAAmBrV,KAAK+S,kBAAkB/B,GAE9C,GAAIqE,EACF,IAAK,IAAIxP,KAAOwP,EACdrV,KAAK8D,YAAY1D,IAAIyF,KAM7BkO,EAAc5T,UAAUmV,UAAY,SAAU5E,GAC5C,IAAIpQ,EAAQN,KAGZ,OADAA,KAAKiU,SAAS7T,IAAIsQ,GACX,WACL,OAAOpQ,EAAM2T,SAAS1T,OAAOmQ,KAKjCqD,EAAc5T,UAAUyP,SAAW,SAAU/J,GAC3C,OAAO7F,KAAK6G,OAAOoM,IAAIpN,IAIzBkO,EAAc5T,UAAU2P,SAAW,SAAUjK,EAAK1E,GAC5CnB,KAAK4P,SAAS/J,IAAM7F,KAAKuV,YAAY1P,GACzC7F,KAAK6G,OAAOnE,IAAImD,EAAK1E,GACrBnB,KAAKwV,qBAAqB3P,EAAK1E,EAAM8B,OACrCjD,KAAKyV,iBAAiB5P,EAAK1E,IAI7B4S,EAAc5T,UAAUoV,YAAc,SAAU1P,GAC9C,IAAIhF,EAEwC,QAA3CA,EAAKb,KAAKoU,mBAAmBnR,IAAI4C,UAAyB,IAAPhF,GAAyBA,IAC7Eb,KAAKoU,mBAAmB7T,OAAOsF,GAC/B7F,KAAK6G,OAAOtG,OAAOsF,UACZ7F,KAAKkU,OAAOrO,IAGrBkO,EAAc5T,UAAU0P,SAAW,SAAUhK,EAAK6P,GAChD,IAAIvU,EAAQnB,KAAK6G,OAAO5D,IAAI4C,GAO5B,YALcF,IAAVxE,QAAwCwE,IAAjB+P,IACzBvU,EAAQ,IAAIM,EAAYiU,GACxB1V,KAAK8P,SAASjK,EAAK1E,IAGdA,GAIT4S,EAAc5T,UAAUqP,aAAe,SAAUmG,GAC/C3V,KAAK6G,OAAO0J,QAAQoF,IAKtB5B,EAAc5T,UAAUyV,YAAc,WACpC,OAAO5V,KAAKyU,SAGdV,EAAc5T,UAAU0V,aAAe,SAAUxB,QAChC,IAAXA,IACFA,EAAS,IAGXrU,KAAKqU,OAAS,YAAS,GAAIA,IAI7BN,EAAc5T,UAAUqV,qBAAuB,SAAU3P,EAAK1E,GAC5DnB,KAAKkU,OAAOrO,GAAO1E,GAIrB4S,EAAc5T,UAAU2V,gBAAkB,SAAUjP,EAAQ1F,GAC1D,GAAsB,iBAAX0F,EACT7G,KAAKwV,qBAAqB3O,EAAQ1F,QAElC,IAAK,IAAI0E,KAAOgB,EACd7G,KAAKwV,qBAAqB3P,EAAKgB,EAAOhB,KAK5CkO,EAAc5T,UAAU4V,eAAiB,WACvC,IAAK7T,OAAOlC,KAAKwU,eAAe,GAAO,IAGzCT,EAAc5T,UAAU6V,0BAA4B,WAClD,IAAKC,UAAUjW,KAAK6U,WAAWqB,mBAAmB,GAAO,IAG3DnC,EAAc5T,UAAUsV,iBAAmB,SAAU5P,EAAK1E,GACxD,IAAIb,EAAQN,KAaRmW,EAAsBhV,EAAM0B,UAXjB,SAAkBqR,GAC/B5T,EAAMkV,qBAAqB3P,EAAKqO,GAGhC5T,EAAMmU,SAAWnU,EAAM+T,OAAOlK,UAAY,IAAKoK,OAAOjU,EAAMiU,QAAQ,GAAO,MAQzE6B,EAAsBjV,EAAM6B,iBALjB,WACb1C,EAAMmU,SAAWnU,EAAMyV,oBAKzB/V,KAAKoU,mBAAmB1R,IAAImD,GAAK,WAC/BsQ,IACAC,QAKJrC,EAAc5T,UAAUuU,MAAQ,SAAUD,GACxC,cAAYA,EAAS,kGAEjBzU,KAAKgU,SACPhU,KAAKqW,iBAAmBrW,KAAKgU,OAAOsB,UAAUtV,OAQhDA,KAAKyU,QAAUzU,KAAKoC,QAAUqS,GAIhCV,EAAc5T,UAAUwU,QAAU,WAChC,IAAIrU,EAAQN,KAEZA,KAAKwP,cAAa,SAAU8G,EAAGzQ,GAC7B,OAAOvF,EAAMiV,YAAY1P,MAE3B,IAAW0O,OAAOvU,KAAKuU,QACvB,IAAWrS,OAAOlC,KAAKkC,QACvBlC,KAAKqW,kBAAoBrW,KAAKqW,oBAGzBtC,EAxRT,GA2RA,SAASwC,GAAKC,GACZ,OAAOA,EAST,SAASC,GAA4B5V,GACnC,IAAI0L,EAAM1L,EAAG0L,IAIb,MAAO,CACLxF,EAAG,CACD2P,IALO7V,EAAG6L,KAMVmH,IALQhT,EAAG2L,OAObxF,EAAG,CACD0P,IAAKnK,EACLsH,IARShT,EAAG4L,SAyElB,SAASkK,GAAYC,GACnB,MAAO,CACL7P,EAAG,YAAS,GAAI6P,EAAI7P,GACpBC,EAAG,YAAS,GAAI4P,EAAI5P,IAQxB,IAAI6P,GAAY,CACdC,UAAW,EACXtP,MAAO,EACPsC,OAAQ,EACRiN,YAAa,GAGf,SAAS1U,KACP,MAAO,CACL0E,EAAG,YAAS,GAAI8P,IAChB7P,EAAG,YAAS,GAAI6P,KASpB,IAAIG,GAAgB,CAAC,GAAI,IAAK,IAAK,KAW/BC,GAAoB,IAAI/W,IAKxBgX,GAAiB,CAAC,uBAAwB,IAAK,IAAK,KAaxD,SAASC,GAAmB1W,EAAGC,GAC7B,OAAOwW,GAAeE,QAAQ3W,GAAKyW,GAAeE,QAAQ1W,GAxBhD,CAAC,cAAe,YAAa,QAAS,SAAU,QAWtD6P,SAAQ,SAAU8G,GACtB,IAAIC,EAAe,IAAIpX,IAAI,CAAC,SAAU,SAAS+S,IAAIoE,GACnDL,GAAczG,SAAQ,SAAUgH,GAC9B,IAAI1R,EAAMwR,EAAeE,EACzBL,GAAezE,KAAK5M,GACpByR,GAAgBL,GAAkB7W,IAAIyF,SAe1C,IAAI2R,GAAmB,IAAItX,IAAIgX,IAE/B,SAASO,GAAgB5R,GACvB,OAAO2R,GAAiBvE,IAAIpN,GAO9B,IAAI6R,GAAuB,IAAIxX,IAAI,CAAC,UAAW,UAAW,YAE1D,SAASyX,GAAsB9R,GAC7B,OAAO6R,GAAqBzE,IAAIpN,GAGlC,IAAI+R,GAAiB,CACnB7Q,EAAG,aACHC,EAAG,aACHC,EAAG,aACH6G,qBAAsB,eAuExB,SAAS+J,GAA+BhX,EAAIiX,GAC1C,IAAI/Q,EAAIlG,EAAGkG,EACPC,EAAInG,EAAGmG,EAUX,MAAO,eAFUD,EAAE+P,UAAYgB,EAAU/Q,EAEJ,OADpBC,EAAE8P,UAAYgB,EAAU9Q,EACkB,gBAAkBD,EAAES,MAAQ,KAAOR,EAAEQ,MAAQ,IAG1G,IAAIuQ,GAAqBF,GAA+BxV,KAAS,CAC/D0E,EAAG,EACHC,EAAG,IAqCL,SAASgR,GAAcnS,GACrB,OAAOA,EAAIE,WAAW,MAGxB,SAASkS,GAAgB9W,GACvB,MAAwB,iBAAVA,GAAsBA,EAAM4E,WAAW,UAavD,IAAImS,GAAmB,uDAevB,SAASC,GAAiB/V,EAASqS,EAASM,QAC5B,IAAVA,IACFA,EAAQ,GAGV,YAAUA,GAPG,EAOgB,yDAA4D3S,EAAU,wDAEnG,IAAIvB,EAAK,YApBX,SAA0BuB,GACxB,IAAIgW,EAAQF,GAAiBG,KAAKjW,GAClC,IAAKgW,EAAO,MAAO,CAAC,GAEpB,IAAIvX,EAAK,YAAOuX,EAAO,GAIvB,MAAO,CAHKvX,EAAG,GACAA,EAAG,IAcFyX,CAAiBlW,GAAU,GACvCmW,EAAQ1X,EAAG,GACX2X,EAAW3X,EAAG,GAGlB,GAAK0X,EAAL,CAEA,IAAIlJ,EAAWoJ,OAAOC,iBAAiBjE,GAASkE,iBAAiBJ,GAEjE,OAAIlJ,EACKA,EAASuJ,OACPX,GAAgBO,GAElBL,GAAiBK,EAAU/D,EAASM,EAAQ,GAE5CyD,GAsDX,SAASK,GAAgBC,EAAQC,GAC/B,OAAOD,GAAUC,EAAKlF,IAAMkF,EAAKrC,KAAO,IAwF1C,IAAIsC,GAA6B,CAC/BC,QA9EF,SAA6B/E,EAAQgF,GAKnC,GAAsB,iBAAXhF,EAAqB,CAC9B,IAAI,IAAGpO,KAAKoO,GAGV,OAAOA,EAFPA,EAAStR,WAAWsR,GAaxB,OAFQ2E,GAAgB3E,EAAQgF,EAAYnS,GAEjC,KADH8R,GAAgB3E,EAAQgF,EAAYlS,GACtB,MA4DpBmS,GAAuB,CACzBtN,aAAc,YAAS,YAAS,GAAImN,IAA6B,CAC/DI,QAAS,CAAC,sBAAuB,uBAAwB,yBAA0B,6BAErFrN,oBAAqBiN,GACrBhN,qBAAsBgN,GACtB9M,uBAAwB8M,GACxB/M,wBAAyB+M,GACzBK,UAAW,CACTJ,QAhEJ,SAA0B/E,EAAQoF,EAAcjX,EAAOyV,GACrD,IAAIyB,EAAWrF,EAKXsF,EAAuBtF,EAAOuF,SAAS,QACvCC,EAAe,GAEfF,IACFtF,EAASA,EAAOyF,QAAQzB,IAAkB,SAAUE,GAElD,OADAsB,EAAajH,KAAK2F,GAbT,YAkBb,IAAIwB,EAAS,IAAQrL,MAAM2F,GAE3B,GAAI0F,EAAOtU,OAAS,EAAG,OAAOiU,EAC9B,IAAIM,EAAW,IAAQC,kBAAkB5F,GACrC9L,EAA8B,iBAAdwR,EAAO,GAAkB,EAAI,EAE7CG,EAAS1X,EAAM0E,EAAES,MAAQsQ,EAAU/Q,EACnCiT,EAAS3X,EAAM2E,EAAEQ,MAAQsQ,EAAU9Q,EACvC4S,EAAO,EAAIxR,IAAW2R,EACtBH,EAAO,EAAIxR,IAAW4R,EAQtB,IAAIC,EAAe,YAAIF,EAAQC,EAAQ,IAEL,iBAAvBJ,EAAO,EAAIxR,KAAsBwR,EAAO,EAAIxR,IAAW6R,GAEhC,iBAAvBL,EAAO,EAAIxR,KAAsBwR,EAAO,EAAIxR,IAAW6R,GAClE,IAAIC,EAASL,EAASD,GAEtB,GAAIJ,EAAsB,CACxB,IAAIW,EAAM,EACVD,EAASA,EAAOP,QA5CL,SA4CuB,WAChC,IAAIS,EAAcV,EAAaS,GAE/B,OADAA,IACOC,KAIX,OAAOF,KAiDT,SAASG,GAAgBnG,EAAQoG,EAAOC,EAAM3P,EAAW4P,EAAiBC,EAAe5Z,EAAI6Z,EAA2BrY,EAAOsY,EAAY7C,EAAW8C,GACpJ,IAAIC,EAA6Bha,EAAGga,2BAChCC,EAAoBja,EAAGia,kBACvBC,EAAqBla,EAAGka,mBAI5BN,EAAcnV,OAAS,EAEvB,IAAI0V,GAAe,EACfC,GAAqB,EAErBC,GAAkB,EAOtB,IAAK,IAAIrV,KAAOqO,EAAQ,CACtB,IAAI/S,EAAQ+S,EAAOrO,GAEfsV,EAAYtM,EAAoBhJ,GAChCuV,EAActM,EAAe3N,EAAOga,GAExC,GAAI1D,GAAgB5R,GAAM,CAKxB,GAHAmV,GAAe,EACfpQ,EAAU/E,GAAOuV,EACjBX,EAAchI,KAAK5M,IACdqV,EAAiB,SAIlB/Z,UADqCwE,IAAtBwV,EAAUvT,QAAwBuT,EAAUvT,QAAU,KAC7CsT,GAAkB,QACzC,GAAIvD,GAAsB9R,GAE/B2U,EAAgB3U,GAAOuV,EACvBH,GAAqB,OAChB,GAAY,cAARpV,GAAwC,mBAAV1E,EAAsB,CAG7D,IAAIka,EAASrD,GAAcnS,GAAO0U,EAAOD,EAGzC,GAAII,GAA6BvB,GAAqBtT,GAAM,CAC1D,IAAIyV,EAAYnC,GAAqBtT,GAAKoT,QAAQ9X,EAAOyZ,EAAWvY,EAAOyV,GAMvEsB,EAAUD,GAAqBtT,GAAKuT,QAExC,GAAIA,EAGF,IAFA,IAAImC,EAAMnC,EAAQ9T,OAET0L,EAAI,EAAGA,EAAIuK,EAAKvK,IACvBqK,EAAOjC,EAAQpI,IAAMsK,OAGvBD,EAAOxV,GAAOyV,OAGhBD,EAAOxV,GAAOuV,GAWhBV,GACFJ,EAAM1P,UAAYiN,GAA+B8C,EAAY7C,GACzDwC,EAAM1P,YAAcmN,KAAoBuC,EAAM1P,UAAY,IAM1DoQ,IACFV,EAAM1P,WAAa,IA5VzB,SAAsCA,EAAW6P,GAC/C,IAAIe,EAAkB,GACtBf,EAAcgB,KAAKtE,IAGnB,IAFA,IAAIuE,EAAmBjB,EAAcnV,OAE5B0L,EAAI,EAAGA,EAAI0K,EAAkB1K,IAAK,CACzC,IAAInL,EAAM4U,EAAczJ,GAEpBiG,GAAkBhE,IAAIpN,KACxB2V,GAAmB3V,EAAM,IAAM+E,EAAU/E,GAAO,MAIpD,OAAO2V,EA+UsBG,CAA6B/Q,EAAW6P,GACjEH,EAAM1P,UAAY0P,EAAM1P,UAAUgO,QAGhCkC,IACFR,EAAM1P,UAAYkQ,EAAkBlQ,EAAW0P,EAAM1P,YAGvD0P,EAAME,gBA/WV,SAA8C3Z,GAC5C,IAAIkG,EAAIlG,EAAGkG,EACPC,EAAInG,EAAGmG,EACX,OAAkB,IAAXD,EAAE+C,OAAe,KAAkB,IAAX9C,EAAE8C,OAAe,MA4WtB8R,CAAqCjB,KAEzDK,IACFV,EAAM1P,UAvcZ,SAAwBA,EAAW6P,EAAeK,EAAmBe,EAAoBhB,EAA4BE,QAChF,IAA/BF,IACFA,GAA6B,QAGJ,IAAvBE,IACFA,GAAqB,GAIvB,IAAIS,EAAkB,GAEtBf,EAAcgB,KAAKtE,IAOnB,IAJA,IAAI2E,GAAgB,EAEhBJ,EAAmBjB,EAAcnV,OAE5B0L,EAAI,EAAGA,EAAI0K,EAAkB1K,IAAK,CACzC,IAAInL,EAAM4U,EAAczJ,GACxBwK,IAAoB5D,GAAe/R,IAAQA,GAAO,IAAM+E,EAAU/E,GAAO,KAC7D,MAARA,IAAaiW,GAAgB,GAiBnC,OAdKA,GAAiBjB,EACpBW,GAAmB,gBAEnBA,EAAkBA,EAAgB5C,OAKhCkC,EACFU,EAAkBV,EAAkBlQ,EAAWiR,EAAqB,GAAKL,GAChET,GAAsBc,IAC/BL,EAAkB,QAGbA,EAgaeO,CAAenR,EAAW6P,EAAeK,EAAmBI,EAAiBL,EAA4BE,IAGzHE,IACFX,EAAME,gBA5ZZ,SAA8B3Z,GAC5B,IAAIE,EAAKF,EAAGkN,QACRA,OAAiB,IAAPhN,EAAgB,MAAQA,EAClCC,EAAKH,EAAGmN,QACRA,OAAiB,IAAPhN,EAAgB,MAAQA,EAClCqJ,EAAKxJ,EAAGoN,QAEZ,OAAOF,EAAU,IAAMC,EAAU,UADZ,IAAP3D,EAAgB,EAAIA,GAsZN2R,CAAqBxB,KAWnD,SAASyB,GAAUlD,EAAMmD,GACvBnD,EAAKrC,IAAMwF,EAAWxF,IACtBqC,EAAKlF,IAAMqI,EAAWrI,IAkBxB,SAASsI,GAAWC,EAAO5U,EAAOuP,GAGhC,OAAOA,EADMvP,GADY4U,EAAQrF,GASnC,SAASsF,GAAgBD,EAAOtF,EAAWtP,EAAOuP,EAAauF,GAK7D,YAJiB3W,IAAb2W,IACFF,EAAQD,GAAWC,EAAOE,EAAUvF,IAG/BoF,GAAWC,EAAO5U,EAAOuP,GAAeD,EAOjD,SAASyF,GAAexD,EAAMjC,EAAWtP,EAAOuP,EAAauF,QACzC,IAAdxF,IACFA,EAAY,QAGA,IAAVtP,IACFA,EAAQ,GAGVuR,EAAKrC,IAAM2F,GAAgBtD,EAAKrC,IAAKI,EAAWtP,EAAOuP,EAAauF,GACpEvD,EAAKlF,IAAMwI,GAAgBtD,EAAKlF,IAAKiD,EAAWtP,EAAOuP,EAAauF,GAOtE,SAASE,GAAc5F,EAAK/V,GAC1B,IAAIkG,EAAIlG,EAAGkG,EACPC,EAAInG,EAAGmG,EACXuV,GAAe3F,EAAI7P,EAAGA,EAAE+P,UAAW/P,EAAES,MAAOT,EAAEgQ,aAC9CwF,GAAe3F,EAAI5P,EAAGA,EAAE8P,UAAW9P,EAAEQ,MAAOR,EAAE+P,aAShD,SAAS0F,GAAoBC,EAAO3D,EAAM4D,EAAY9b,GACpD,IAAIE,EAAK,YAAOF,EAAI,GAChBgF,EAAM9E,EAAG,GACT6b,EAAW7b,EAAG,GACd8b,EAAY9b,EAAG,GAGnB2b,EAAMhG,IAAMqC,EAAKrC,IACjBgG,EAAM7I,IAAMkF,EAAKlF,IACjB,IAAIiJ,OAAuCnX,IAA1BgX,EAAWE,GAA2BF,EAAWE,GAAa,GAC3E9F,EAAc,YAAIgC,EAAKrC,IAAKqC,EAAKlF,IAAKiJ,GAE1CP,GAAeG,EAAOC,EAAW9W,GAAM8W,EAAWC,GAAW7F,EAAa4F,EAAWnV,OAOvF,IAAIuV,GAAQ,CAAC,IAAK,SAAU,WACxBC,GAAQ,CAAC,IAAK,SAAU,WAc5B,SAASC,GAAiBb,EAAOtF,EAAWtP,EAAOuP,EAAauF,GAQ9D,OANAF,EAAQD,GADRC,GAAStF,EACiB,EAAItP,EAAOuP,QAEpBpR,IAAb2W,IACFF,EAAQD,GAAWC,EAAO,EAAIE,EAAUvF,IAGnCqF,EA8BT,SAASc,GAAqBnE,EAAM4D,EAAY9b,GAC9C,IAAIE,EAAK,YAAOF,EAAI,GAChBgF,EAAM9E,EAAG,GACT6b,EAAW7b,EAAG,GACd8b,EAAY9b,EAAG,IA3BrB,SAAyBgY,EAAMjC,EAAWtP,EAAOsC,EAAQwS,QACrC,IAAdxF,IACFA,EAAY,QAGA,IAAVtP,IACFA,EAAQ,QAGK,IAAXsC,IACFA,EAAS,IAGX,IAAIiN,EAAc,YAAIgC,EAAKrC,IAAKqC,EAAKlF,IAAK/J,GAAUgN,EACpDiC,EAAKrC,IAAMuG,GAAiBlE,EAAKrC,IAAKI,EAAWtP,EAAOuP,EAAauF,GACrEvD,EAAKlF,IAAMoJ,GAAiBlE,EAAKlF,IAAKiD,EAAWtP,EAAOuP,EAAauF,GAcrEa,CAAgBpE,EAAM4D,EAAW9W,GAAM8W,EAAWC,GAAWD,EAAWE,GAAYF,EAAWnV,OAoCjG,SAAS4V,GAAOjc,EAAOqI,EAAQ6T,GAS7B,YARe,IAAX7T,IACFA,EAAS,QAGS,IAAhB6T,IACFA,EAAc,KAGT,YAASlc,EAAOqI,GAAU6T,EAGnC,SAASC,GAAWvE,GAClB,OAAOA,EAAKlF,IAAMkF,EAAKrC,IAQzB,SAAS6G,GAAWC,EAAQhU,GAC1B,IA9ByCvH,EA8BrC6H,EAAS,GACT2T,EAAeH,GAAWE,GAC1BE,EAAeJ,GAAW9T,GAQ9B,OANIkU,EAAeD,EACjB3T,EAAS,YAASN,EAAOkN,IAAKlN,EAAOqK,IAAM4J,EAAcD,EAAO9G,KACvD+G,EAAeC,IACxB5T,EAAS,YAAS0T,EAAO9G,IAAK8G,EAAO3J,IAAM6J,EAAclU,EAAOkN,MArCzBzU,EAwCpB6H,EAvCd,YAAM,EAAG,EAAG7H,GAiDrB,SAAS0b,GAAgBtb,EAAOmb,EAAQhU,EAAQM,GAC9CzH,EAAMyH,YAAoBnE,IAAXmE,EAAuByT,GAAWC,EAAQhU,GAAUM,EACnEzH,EAAM0U,YAAc,YAAIyG,EAAO9G,IAAK8G,EAAO3J,IAAKxR,EAAMyH,QACtDzH,EAAMmF,MAAQ8V,GAAW9T,GAAU8T,GAAWE,GAC1CJ,GAAO/a,EAAMmF,MAAO,EAAG,QAASnF,EAAMmF,MAAQ,GAClDnF,EAAMyU,UAAY,YAAItN,EAAOkN,IAAKlN,EAAOqK,IAAKxR,EAAMyH,QAAUzH,EAAM0U,YAChEqG,GAAO/a,EAAMyU,aAAYzU,EAAMyU,UAAY,GAUjD,SAAS8G,GAAevb,EAAOmb,EAAQhU,EAAQM,GAC7C6T,GAAgBtb,EAAM0E,EAAGyW,EAAOzW,EAAGyC,EAAOzC,EAAG+C,GAC7C6T,GAAgBtb,EAAM2E,EAAGwW,EAAOxW,EAAGwC,EAAOxC,EAAG8C,GAa/C,SAAS+T,GAASxd,GAChB,MAAO,CAACA,EAAQ,KAAMA,EAAQ,MAahC,SAASyd,GAAerJ,EAASsJ,GAE/B,OAAOtH,GAp3BT,SAA8B5V,EAAImd,GAChC,IAAIzR,EAAM1L,EAAG0L,IACTG,EAAO7L,EAAG6L,KACVD,EAAS5L,EAAG4L,OACZD,EAAQ3L,EAAG2L,WAEQ,IAAnBwR,IACFA,EAAiBzH,IAGnB,IAAI0H,EAAUD,EAAe,CAC3BjX,EAAG2F,EACH1F,EAAGuF,IAED2R,EAAcF,EAAe,CAC/BjX,EAAGyF,EACHxF,EAAGyF,IAEL,MAAO,CACLF,IAAK0R,EAAQjX,EACb0F,KAAMuR,EAAQlX,EACd0F,OAAQyR,EAAYlX,EACpBwF,MAAO0R,EAAYnX,GA81BcoX,CADzB1J,EAAQ2J,wBAC2CL,IAG/D,IAqBIM,GArBAC,GAAiB,IAAIpe,IAAI,CAAC,QAAS,SAAU,MAAO,OAAQ,QAAS,SAAU,IAAK,MAEpFqe,GAAkB,SAAyB1Y,GAC7C,OAAOyY,GAAerL,IAAIpN,IAOxB2Y,GAAsB,SAA6Brd,EAAOqF,GAG5DrF,EAAMuB,IAAI8D,GAAI,GACdrF,EAAMuB,IAAI8D,IAGRiY,GAAgB,SAAuBxc,GACzC,OAAOA,IAAM,KAAUA,IAAM,MAK/B,SAAWoc,GACTA,EAA4B,MAAI,QAChCA,EAA6B,OAAI,SACjCA,EAA2B,KAAI,OAC/BA,EAA4B,MAAI,QAChCA,EAA0B,IAAI,MAC9BA,EAA6B,OAAI,SANnC,CAOGA,KAAyBA,GAAuB,KAEnD,IAAIK,GAAmB,SAA0BC,EAAQC,GACvD,OAAOhc,WAAW+b,EAAOE,MAAM,MAAMD,KAGnCE,GAAyB,SAAgCC,EAAMC,GACjE,OAAO,SAAUC,EAAOpe,GACtB,IAAI+J,EAAY/J,EAAG+J,UACnB,GAAkB,SAAdA,IAAyBA,EAAW,OAAO,EAC/C,IAAIsU,EAAWtU,EAAUwN,MAAM,sBAE/B,GAAI8G,EACF,OAAOR,GAAiBQ,EAAS,GAAIF,GAErC,IAAIL,EAAS/T,EAAUwN,MAAM,oBAE7B,OAAIuG,EACKD,GAAiBC,EAAO,GAAII,GAE5B,IAMXtE,GAAgB,IAAIva,IAAI,CAAC,IAAK,IAAK,MACnCif,GAAgCjI,GAAepG,QAAO,SAAUjL,GAClE,OAAQ4U,GAAcxH,IAAIpN,MAkB5B,IAAIuZ,GAAmB,CAErBjT,MAAO,SAAetL,GACpB,IAAIkG,EAAIlG,EAAGkG,EACX,OAAOA,EAAE8M,IAAM9M,EAAE2P,KAEnBrK,OAAQ,SAAgBxL,GACtB,IAAImG,EAAInG,EAAGmG,EACX,OAAOA,EAAE6M,IAAM7M,EAAE0P,KAEnBnK,IAAK,SAAa0S,EAAOpe,GACvB,IAAI0L,EAAM1L,EAAG0L,IACb,OAAO3J,WAAW2J,IAEpBG,KAAM,SAAcuS,EAAOpe,GACzB,IAAI6L,EAAO7L,EAAG6L,KACd,OAAO9J,WAAW8J,IAEpBD,OAAQ,SAAgB5L,EAAIE,GAC1B,IAAIiG,EAAInG,EAAGmG,EACPuF,EAAMxL,EAAGwL,IACb,OAAO3J,WAAW2J,IAAQvF,EAAE6M,IAAM7M,EAAE0P,MAEtClK,MAAO,SAAe3L,EAAIE,GACxB,IAAIgG,EAAIlG,EAAGkG,EACP2F,EAAO3L,EAAG2L,KACd,OAAO9J,WAAW8J,IAAS3F,EAAE8M,IAAM9M,EAAE2P,MAGvC3P,EAAG+X,GAAuB,EAAG,IAC7B9X,EAAG8X,GAAuB,EAAG,KAsC3BO,GAAmC,SAA0CnQ,EAAe1F,EAAQM,EAAQoG,QAC/F,IAAXpG,IACFA,EAAS,SAGW,IAAlBoG,IACFA,EAAgB,IAGlB1G,EAAS,YAAS,GAAIA,GACtB0G,EAAgB,YAAS,GAAIA,GAC7B,IAAIoP,EAAuBlW,OAAOC,KAAKG,GAAQsH,OAAOyN,IAGlDgB,EAAyB,GACzBC,GAAsC,EACtCC,EAAuB,GAiE3B,GAhEAH,EAAqB/O,SAAQ,SAAU1K,GACrC,IAAI1E,EAAQ+N,EAAcW,SAAShK,GACnC,GAAKqJ,EAAcU,SAAS/J,GAA5B,CACA,IAGI6Z,EAHA7W,EAAOiB,EAAOjE,GACdW,EAAKgD,EAAO3D,GACZ8Z,EAAWlR,EAAuB5F,GAMtC,GAAI7C,EAAkBQ,GAGpB,IAFA,IAAIoZ,EAAepZ,EAAGlB,OAEb0L,EAAc,OAAVxK,EAAG,GAAc,EAAI,EAAGwK,EAAI4O,EAAc5O,IAChD0O,EAIH,YAAUjR,EAAuBjI,EAAGwK,MAAQ0O,EAAQ,2CAHpDA,EAASjR,EAAuBjI,EAAGwK,IACnC,YAAU0O,IAAWC,GAAYlB,GAAckB,IAAalB,GAAciB,GAAS,sEAMvFA,EAASjR,EAAuBjI,GAGlC,GAAImZ,IAAaD,EAGf,GAAIjB,GAAckB,IAAalB,GAAciB,GAAS,CACpD,IAAItd,EAAUjB,EAAM8B,MAEG,iBAAZb,GACTjB,EAAMuB,IAAIE,WAAWR,IAGL,iBAAPoE,EACTgD,EAAO3D,GAAOjD,WAAW4D,GAChBpB,MAAMC,QAAQmB,IAAOkZ,IAAW,MACzClW,EAAO3D,GAAOW,EAAG+B,IAAI3F,kBAEb+c,aAA2C,EAASA,EAAS/U,aAAe8U,aAAuC,EAASA,EAAO9U,aAAwB,IAAT/B,GAAqB,IAAPrC,GAG7J,IAATqC,EACF1H,EAAMuB,IAAIgd,EAAO9U,UAAU/B,IAE3BW,EAAO3D,GAAO8Z,EAAS/U,UAAUpE,IAK9BgZ,IACHD,EAzJV,SAAyCrQ,GACvC,IAAI2Q,EAAoB,GAWxB,OAVAV,GAA8B5O,SAAQ,SAAU1K,GAC9C,IAAI1E,EAAQ+N,EAAcW,SAAShK,QAErBF,IAAVxE,IACF0e,EAAkBpN,KAAK,CAAC5M,EAAK1E,EAAM8B,QACnC9B,EAAMuB,IAAImD,EAAIE,WAAW,SAAW,EAAI,OAIxC8Z,EAAkBva,QAAQ4J,EAAchN,SACrC2d,EA6I0BC,CAAgC5Q,GACzDsQ,GAAsC,GAGxCC,EAAqBhN,KAAK5M,GAC1BqK,EAAcrK,QAA8BF,IAAvBuK,EAAcrK,GAAqBqK,EAAcrK,GAAO2D,EAAO3D,GACpF2Y,GAAoBrd,EAAOqF,QAK7BiZ,EAAqBna,OAAQ,CAC/B,IAAIya,EArHuB,SAAkCvW,EAAQ0F,EAAe8Q,GACtF,IAAIC,EAAa/Q,EAAc4O,iBAC3BoC,EAAuBhR,EAAcwJ,mBACrCyH,EAAUD,EAAqBC,QAM/BC,EAAsB,CACxB7T,IANQ2T,EAAqB3T,IAO7BG,KANSwT,EAAqBxT,KAO9BD,OANWyT,EAAqBzT,OAOhCD,MANU0T,EAAqB1T,MAO/B5B,UANcsV,EAAqBtV,WAUrB,SAAZuV,GACFjR,EAAc4G,gBAAgB,UAAWtM,EAAO2W,SAAW,SAI7DjR,EAAchN,SACd,IAAIme,EAAanR,EAAc4O,iBAQ/B,OAPAkC,EAAYzP,SAAQ,SAAU1K,GAG5B,IAAI1E,EAAQ+N,EAAcW,SAAShK,GACnC2Y,GAAoBrd,EAAOie,GAAiBvZ,GAAKoa,EAAYG,IAC7D5W,EAAO3D,GAAOuZ,GAAiBvZ,GAAKwa,EAAYH,MAE3C1W,EAqFiB8W,CAAyB9W,EAAQ0F,EAAeuQ,GActE,OAZIF,EAAuBja,QACzBia,EAAuBhP,SAAQ,SAAU1P,GACvC,IAAIE,EAAK,YAAOF,EAAI,GAChBgF,EAAM9E,EAAG,GACTI,EAAQJ,EAAG,GAEfmO,EAAcW,SAAShK,GAAKnD,IAAIvB,MAKpC+N,EAAchN,SACP,CACLsH,OAAQuW,EACR7P,cAAeA,GAGjB,MAAO,CACL1G,OAAQA,EACR0G,cAAeA,IAarB,SAASqQ,GAAerR,EAAe1F,EAAQM,EAAQoG,GACrD,OA/PqB,SAA0B1G,GAC/C,OAAOJ,OAAOC,KAAKG,GAAQgX,KAAKjC,IA8PzBkC,CAAiBjX,GAAU6V,GAAiCnQ,EAAe1F,EAAQM,EAAQoG,GAAiB,CACjH1G,OAAQA,EACR0G,cAAeA,GASnB,IAAIwQ,GAAkB,SAAyBxR,EAAe1F,EAAQM,EAAQoG,GAC5E,IAAIb,EAx0BN,SAA6BH,EAAerO,EAAIqP,GAC9C,IAAInP,EAEAyI,EAAS,YAAO3I,EAAI,IAEpB4T,EAAUvF,EAAc0G,cAC5B,KAAMnB,aAAmBkM,aAAc,MAAO,CAC5CnX,OAAQA,EACR0G,cAAeA,GAiBjB,IAAK,IAAIrK,KAbLqK,IACFA,EAAgB,YAAS,GAAIA,IAI/BhB,EAAcM,cAAa,SAAUrO,GACnC,IAAIiB,EAAUjB,EAAM8B,MACpB,GAAKgV,GAAgB7V,GAArB,CACA,IAAIiN,EAAW8I,GAAiB/V,EAASqS,GACrCpF,GAAUlO,EAAMuB,IAAI2M,OAIV7F,EAAQ,CACtB,IAAIpH,EAAUoH,EAAO3D,GACrB,GAAKoS,GAAgB7V,GAArB,CACA,IAAIiN,EAAW8I,GAAiB/V,EAASqS,GACpCpF,IAEL7F,EAAO3D,GAAOwJ,EAIVa,IAA6C,QAA7BnP,EAAKmP,EAAcrK,UAAyB,IAAP9E,IAAqBmP,EAAcrK,GAAOzD,MAGrG,MAAO,CACLoH,OAAQA,EACR0G,cAAeA,GAgyBF0Q,CAAoB1R,EAAe1F,EAAQ0G,GAG1D,OAAOqQ,GAAerR,EAFtB1F,EAAS6F,EAAS7F,OAE2BM,EAD7CoG,EAAgBb,EAASa,gBAQvB2Q,GAEJ,SAAUC,GAGR,SAASD,IACP,IAAIvgB,EAAmB,OAAXwgB,GAAmBA,EAAOhN,MAAM9T,KAAM+gB,YAAc/gB,KAqJhE,OA/IAM,EAAM0gB,cAAgB,CACpBnG,4BAA4B,EAC5BE,oBAAoB,GAOtBza,EAAMga,MAAQ,GAOdha,EAAM2gB,WAAa,GAMnB3gB,EAAMia,KAAO,GAMbja,EAAMsK,UAAY,GAMlBtK,EAAMka,gBAAkB,GAMxBla,EAAMma,cAAgB,GACtBna,EAAM+T,OAAS/T,EAAM0gB,cAOrB1gB,EAAMoa,2BAA4B,EAMlCpa,EAAM4gB,sBAAwB,IAAInhB,EAClCO,EAAM6gB,uBAAyB,IAAIphB,EACnCO,EAAM8gB,2BAA6B,IAAIrhB,EAMvCO,EAAM+gB,uBAAwB,EAQ9B/gB,EAAMghB,eArsCD,CACLva,EAAG,CACD2P,IAAK,EACL7C,IAAK,GAEP7M,EAAG,CACD0P,IAAK,EACL7C,IAAK,IAusCPvT,EAAMwX,UAAY,CAChB/Q,EAAG,EACHC,EAAG,GAEL1G,EAAMihB,cAAgB,CACpBxa,EAAG,EACHC,EAAG,GAWL1G,EAAM+B,MAAQA,KASd/B,EAAMqa,WAAatY,KAOnB/B,EAAMkhB,eAAiBzJ,GAKvBzX,EAAMmhB,wBAA0B,CAC9B1a,EAAG,aACHC,EAAG,cAEL1G,EAAMohB,mBAAoB,EAK1BphB,EAAMqhB,aAAe,CACnB5a,EAAG/C,EAAY,GACfgD,EAAGhD,EAAY,IAGjB1D,EAAM4V,kBAAoB,WACxB5V,EAAMoa,2BAA6Bpa,EAAMsW,KAAOtW,EAAMshB,qBAQtDthB,EAAM2T,SAAS1D,QAAQsR,KAGlBvhB,EAsZT,OA9iBA,YAAUugB,EAAmBC,GA+J7BD,EAAkB1gB,UAAUoV,YAAc,SAAU1P,GAClDib,EAAO3gB,UAAUoV,YAAYhU,KAAKvB,KAAM6F,UAEjC7F,KAAKua,KAAK1U,UACV7F,KAAKsa,MAAMzU,IASpBgb,EAAkB1gB,UAAU2hB,MAAQ,WAClC9hB,KAAKsa,MAAQ,GACbta,KAAKua,KAAO,GACZva,KAAK4K,UAAY,IAGnBiW,EAAkB1gB,UAAU0V,aAAe,SAAUxB,QACpC,IAAXA,IACFA,EAAS,IAGXrU,KAAKqU,OAAS,YAAS,YAAS,GAAIrU,KAAKghB,eAAgB3M,IAO3DwM,EAAkB1gB,UAAU4hB,KAAO,SAAUlc,GAC3C,OAAO7F,KAAK0Y,mBAAmB7S,IAAQ,GAGzCgb,EAAkB1gB,UAAU2P,SAAW,SAAUjK,EAAK1E,GACpD2f,EAAO3gB,UAAU2P,SAASvO,KAAKvB,KAAM6F,EAAK1E,GAItC0E,EAAIE,WAAW,YAAW/F,KAAKgiB,aAAe,KASpDnB,EAAkB1gB,UAAUgR,gBAAkB,SAAUtL,GACtD,GAAI4R,GAAgB5R,GAAM,CACxB,IAAIoc,EAAmBpT,EAAoBhJ,GAC3C,OAAOoc,GAAmBA,EAAiBra,SAAe,EAE1D,OAAO5H,KAAK+hB,KAAKlc,IASrBgb,EAAkB1gB,UAAU8P,qBAAuB,SAAUpP,EAAIqhB,QACxC,IAAnBA,IACFA,GAAiB,GAGnB,IAAIha,EAAarH,EAAGqH,WAChBgI,EAAgBrP,EAAGqP,cACnB1G,EAAS,YAAO3I,EAAI,CAAC,aAAc,kBAEnCshB,EAAkBniB,KAAKqU,OAAO8N,gBAC9BrY,EAASuH,EAAU7H,EAAQtB,GAAc,GAAIlI,MAWjD,GANImiB,IACEjS,IAAeA,EAAgBiS,EAAgBjS,IAC/C1G,IAAQA,EAAS2Y,EAAgB3Y,IACjCM,IAAQA,EAASqY,EAAgBrY,KAGnCoY,EAAgB,CAClBtR,EAAwB5Q,KAAMwJ,EAAQM,GACtC,IAAIsY,EAAS1B,GAAgB1gB,KAAMwJ,EAAQM,EAAQoG,GACnDA,EAAgBkS,EAAOlS,cACvB1G,EAAS4Y,EAAO5Y,OAGlB,OAAO,YAAS,CACdtB,WAAYA,EACZgI,cAAeA,GACd1G,IAGLqX,EAAkB1gB,UAAUkiB,uBAAyB,WACnDriB,KAAK0a,2BAA4B,GAGnCmG,EAAkB1gB,UAAUmiB,KAAO,YACV,IAAnBtiB,KAAKuiB,YACTviB,KAAKuiB,WAAY,EACjBviB,KAAK+V,mBAGP8K,EAAkB1gB,UAAUqiB,KAAO,YACV,IAAnBxiB,KAAKuiB,YACTviB,KAAKuiB,WAAY,EACjBviB,KAAK+V,mBAQP8K,EAAkB1gB,UAAUsiB,eAAiB,SAAU9M,GACrD,OAAO3V,KAAKkhB,sBAAsB9gB,IAAIuV,IAGxCkL,EAAkB1gB,UAAUuiB,gBAAkB,SAAU/M,GACtD,OAAO3V,KAAKmhB,uBAAuB/gB,IAAIuV,IAGzCkL,EAAkB1gB,UAAUwiB,oBAAsB,SAAUhN,GAC1D,OAAO3V,KAAKohB,2BAA2BhhB,IAAIuV,IAQ7CkL,EAAkB1gB,UAAUyiB,YAAc,SAAUvO,GAClDrU,KAAKkhB,sBAAsB1gB,OAAOR,KAAK4W,IAAK5W,KAAK6iB,iBAAmB7iB,KAAK4W,IAAKvC,IAQhFwM,EAAkB1gB,UAAU2d,eAAiB,WAC3C,IAAIC,EAAqB/d,KAAKqU,OAAO0J,mBACrC,OAAOD,GAAe9d,KAAKyU,QAASsJ,IAGtC8C,EAAkB1gB,UAAU2iB,gCAAkC,WAC5D,IA3sByBlM,EAAK+F,EA2sB1BoG,EAAO/iB,KAAK8d,iBAEhB,OA7sByBlH,EA4sBLmM,EA5sBUpG,EA4sBJ3c,KAAKkU,OA3sBjCgJ,GAAqBtG,EAAI7P,EAAG4V,EAAYI,IACxCG,GAAqBtG,EAAI5P,EAAG2V,EAAYK,IA2sB/B+F,GAOTlC,EAAkB1gB,UAAUuY,iBAAmB,WAC7C,OAAOD,OAAOC,iBAAiB1Y,KAAKyU,UAOtCoM,EAAkB1gB,UAAU6iB,oBAAsB,WAChDhjB,KAAK6iB,gBAAkB7iB,KAAK8iB,kCAM5B9iB,KAAKijB,iBAAgB,EAAOjjB,KAAK6iB,kBAGnChC,EAAkB1gB,UAAU8iB,gBAAkB,SAAUC,EAAOtM,GAC7D,IAAItW,EAAQN,UAEE,IAAVkjB,IACFA,GAAQ,QAGE,IAARtM,IACFA,EAAM5W,KAAK4W,KAGb,IAAI/V,EAAKb,KAAK2hB,aACV5a,EAAIlG,EAAGkG,EACPC,EAAInG,EAAGmG,EACPmc,EAAenjB,KAAK4W,MAAQ5W,KAAK0hB,oBAAsB3a,EAAEjD,gBAAkBkD,EAAElD,eAE7Eof,GAASC,IACXtF,IAAS,SAAU9E,GACjB,IAAIlY,EAAK+V,EAAImC,GACTrC,EAAM7V,EAAG6V,IACT7C,EAAMhT,EAAGgT,IAEbvT,EAAM8iB,cAAcrK,EAAMrC,EAAK7C,OAKrCgN,EAAkB1gB,UAAUkjB,cAAgB,WAC1C,IAAI/iB,EAAQN,KAEZA,KAAK4W,IAAM5W,KAAK8d,iBAChB9d,KAAKsjB,aAAe3M,GAAY3W,KAAK4W,KAChC5W,KAAK4a,YAAW5a,KAAK4a,UAAYjE,GAAY3W,KAAK4W,MACvD5W,KAAKmhB,uBAAuB3gB,OAAOR,KAAK4W,IAAK5W,KAAK6iB,iBAAmB7iB,KAAK4W,KAC1E,IAAKrC,QAAO,WACV,OAAOjU,EAAM2iB,sBAIjBpC,EAAkB1gB,UAAUojB,cAAgB,WAC1CvjB,KAAK0hB,mBAAoB,GAG3Bb,EAAkB1gB,UAAUqjB,gBAAkB,WAC5CxjB,KAAKyjB,sBACLzjB,KAAK0hB,mBAAoB,GAW3Bb,EAAkB1gB,UAAUujB,eAAiB,WAC3C,IAAI5I,EAAoB9a,KAAKqU,OAAOyG,kBACpC9a,KAAKyU,QAAQ6F,MAAM1P,UAAYkQ,EAAoBA,EAAkB,GAAI,IAAM,OAE/E9a,KAAK+V,kBAOP8K,EAAkB1gB,UAAUijB,cAAgB,SAAUrK,EAAMrC,EAAK7C,GAC/D,IAAI8P,EAAa3jB,KAAK4a,UAAU7B,GAChC4K,EAAWjN,IAAMA,EACjBiN,EAAW9P,IAAMA,EAEjB7T,KAAKqhB,uBAAwB,EAC7BrhB,KAAK6U,WAAWmB,6BAOlB6K,EAAkB1gB,UAAUyjB,yBAA2B,SAAU7K,EAAM7Q,GACrE,IAEIrH,EAFAP,EAAQN,KAIR6jB,EAAW7jB,KAAK2hB,aAAa5I,GAC7BhY,EAAKf,KAAK4a,UAAU7B,GACpBrC,EAAM3V,EAAG2V,IAETpR,EADMvE,EAAG8S,IACM6C,EAQnB,OAPAmN,EAAS9gB,iBACT8gB,EAASnhB,IAAIgU,GACbmN,EAASnhB,IAAIgU,GAEbmN,EAAShhB,UAAS,SAAUZ,GAC1B,OAAO3B,EAAM8iB,cAAcrK,EAAM9W,EAAGA,EAAIqD,MAEA,QAAlCzE,EAAKb,KAAK8jB,0BAAuC,IAAPjjB,OAAgB,EAASA,EAAGU,KAAKvB,KAAM+Y,EAAM8K,EAAU,EAAG3b,IAG9G2Y,EAAkB1gB,UAAUsjB,oBAAsB,WAChD,IAAInjB,EAAQN,KAEZ6d,IAAS,SAAU9E,GACjB,OAAOzY,EAAMqhB,aAAa5I,GAAMvV,WASpCqd,EAAkB1gB,UAAUyhB,mBAAqB,WA1+BnD,IAAkBhL,EAAKmN,EAkPEjM,EAAWkM,EAAiBC,EAlPnCrN,EA++BL5W,KAAKsjB,aA/+BKS,EA++BS/jB,KAAK4W,IA9+BnCqF,GAAUrF,EAAI7P,EAAGgd,EAAUhd,GAC3BkV,GAAUrF,EAAI5P,EAAG+c,EAAU/c,GAm/BrBhH,KAAKgU,SACPhU,KAAKuhB,cAAcxa,EAAI/G,KAAK8X,UAAU/Q,EACtC/G,KAAKuhB,cAAcva,EAAIhH,KAAK8X,UAAU9Q,EArwBnB8Q,EAswBH9X,KAAK8X,UAtwBSkM,EAswBEhkB,KAAKgU,OAAO8D,UAtwBGmM,EAswBQjkB,KAAKgU,OAAO3R,MArwBvEyV,EAAU/Q,EAAIid,EAAgBjd,EAAIkd,EAAYld,EAAES,MAChDsQ,EAAU9Q,EAAIgd,EAAgBhd,EAAIid,EAAYjd,EAAEQ,OArFlD,SAAyBoP,EAAK9B,GAG5B,IAFA,IAAIoP,EAAapP,EAASxP,OAEjB0L,EAAI,EAAGA,EAAIkT,EAAYlT,IAC9BwL,GAAc5F,EAAK9B,EAAS9D,GAAG3O,OA61B/B8hB,CAAgBnkB,KAAKsjB,aAActjB,KAAK8U,UAWxC8I,GAAe5d,KAAKqC,MAAOrC,KAAKsjB,aAActjB,KAAK4a,UAAW5a,KAAKgiB,cAKnEhiB,KAAKqhB,uBAAyBrhB,KAAKohB,2BAA2B5gB,OAAOR,KAAK4a,UAAW5a,KAAKqC,OAC1FrC,KAAKqhB,uBAAwB,EAK7B,IAAIG,EAAiB3J,GAA+B7X,KAAKqC,MAAOrC,KAAK8X,WAEjE0J,IAAmBxhB,KAAKwhB,gBAC5BxhB,KAAKuhB,cAAcxa,IAAM/G,KAAK8X,UAAU/Q,GAAK/G,KAAKuhB,cAAcva,IAAMhH,KAAK8X,UAAU9Q,GACnFhH,KAAK+V,iBAGP/V,KAAKwhB,eAAiBA,GAGxBX,EAAkB1gB,UAAUikB,sBAAwB,WA18BtD,IAA4BC,EAAUzN,EAAK+F,EA28BlC3c,KAAK0a,2BAA8B1a,KAAK4W,MA38BrByN,EAk9BLrkB,KAAKshB,eAl9BU1K,EAk9BM5W,KAAK4a,UAl9BN+B,EAk9BiB3c,KAAKkU,OAj9B/DuI,GAAoB4H,EAAStd,EAAG6P,EAAI7P,EAAG4V,EAAYI,IACnDN,GAAoB4H,EAASrd,EAAG4P,EAAI5P,EAAG2V,EAAYK,IAw9BjDY,GAAe5d,KAAK2a,WAAY3a,KAAKsjB,aAActjB,KAAKshB,eAAgBthB,KAAKgiB,gBAa/EnB,EAAkB1gB,UAAUmkB,MAAQ,WAClCtkB,KAAKokB,6BAEkBze,IAAnB3F,KAAKuiB,YACPviB,KAAKsa,MAAMiK,WAAavkB,KAAKuiB,UAAY,UAAY,UAGvDlI,GAAgBra,KAAKkU,OAAQlU,KAAKsa,MAAOta,KAAKua,KAAMva,KAAK4K,UAAW5K,KAAKwa,gBAAiBxa,KAAKya,cAAeza,KAAKqU,OAAQrU,KAAK0a,6BAA+B1a,KAAK4W,IAAK5W,KAAKqC,MAAOrC,KAAK2a,WAAY3a,KAAK8X,UAAW9X,KAAKshB,iBAO7NT,EAAkB1gB,UAAU+B,OAAS,WAOnC,IAAK,IAAI2D,KALT7F,KAAKskB,QAGLlb,OAAOob,OAAOxkB,KAAKyU,QAAQ6F,MAAOta,KAAKsa,OAEvBta,KAAKua,KACnBva,KAAKyU,QAAQ6F,MAAMmK,YAAY5e,EAAK7F,KAAKua,KAAK1U,KAI3Cgb,EA/iBT,CAgjBE9M,IAOE8N,GAAwB,SAA+BnR,GACzD,OAAOA,EAAMwF,qBAWf,SAASwO,GAAYhjB,GACnB,IAAI7B,EAAM,iBAAO,MAMjB,OAJoB,OAAhBA,EAAIuC,UACNvC,EAAIuC,QAAUV,KAGT7B,EAAIuC,QAGb,SAASuiB,GAAa7a,EAAQ1B,EAAQtH,GACpC,MAAyB,iBAAXgJ,EAAsBA,EAAS,IAAGc,UAAUxC,EAAStH,EAAOgJ,GAe5E,IAAI8a,GAAmB,SAA0Bf,EAAUve,GACzD,OAAO,IAAGsF,UAAUiZ,EAAWve,IAG7Buf,GAAW,CACbzc,OAAQ,oBACR0c,MAAO,oBAELC,GAAY,CACd3c,OAAQ,mBACR0c,MAAO,mBAkCT,IAAIE,GAAa,CACfje,EAAG,EACHC,EAAG,EACHmF,MAAO,EACPE,OAAQ,GAMV,SAAS4Y,GAAcpkB,EAAIyZ,EAAOC,EAAM2K,EAAOta,EAAW4P,EAAiBC,EAAepG,EAAQ8Q,EAAYC,EAAiB1K,EAA2BrY,EAAOsY,EAAY7C,EAAW8C,GACtL,IAAIyK,EAAQxkB,EAAGwkB,MACXC,EAAQzkB,EAAGykB,MACXvX,EAAUlN,EAAGkN,QACbC,EAAUnN,EAAGmN,QACbuX,EAAa1kB,EAAG0kB,WAChBxkB,EAAKF,EAAG2kB,YACRA,OAAqB,IAAPzkB,EAAgB,EAAIA,EAClCC,EAAKH,EAAG4kB,WACRA,OAAoB,IAAPzkB,EAAgB,EAAIA,EAgCrC,OAxBAqZ,GANS,YAAOxZ,EAAI,CAAC,QAAS,QAAS,UAAW,UAAW,aAAc,cAAe,eAMlEqkB,EAAO3K,EAAM3P,EAAW4P,EAAiBC,EAAepG,EAAQqG,EAA2BrY,EAAOsY,EAAY7C,EAAW8C,GAM7IsK,EAAMta,YACR0P,EAAM1P,UAAYsa,EAAMta,iBACjBsa,EAAMta,iBAICjF,IAAZoI,QAAqCpI,IAAZqI,GAAyBsM,EAAM1P,aAC1D0P,EAAME,gBA3FV,SAAgC2K,EAAYpX,EAASC,GAGnD,OAFgB2W,GAAa5W,EAASoX,EAAWpe,EAAGoe,EAAWhZ,OAE5C,IADHwY,GAAa3W,EAASmX,EAAWne,EAAGme,EAAW9Y,QAyFrCqZ,CAAuBP,GAAcH,QAAwBrf,IAAZoI,EAAwBA,EAAU,QAAiBpI,IAAZqI,EAAwBA,EAAU,UAItIrI,IAAV0f,IAAqBH,EAAMne,EAAIse,QACrB1f,IAAV2f,IAAqBJ,EAAMle,EAAIse,QAEX3f,IAApByf,QAAgDzf,IAAf4f,GAvEvC,SAAsBL,EAAOS,EAAargB,EAAQsgB,EAASxd,EAAQyd,QACjD,IAAZD,IACFA,EAAU,QAGG,IAAXxd,IACFA,EAAS,QAGS,IAAhByd,IACFA,GAAc,GAKhB,IAAIxc,EAAOwc,EAAchB,GAAWE,GAEpCG,EAAM7b,EAAKjB,QAAUwc,IAAkBxc,EAAQud,GAE/C,IAAIJ,EAAaX,GAAiBtf,EAAQqgB,GACtCH,EAAcZ,GAAiBgB,EAASD,GAC5CT,EAAM7b,EAAKyb,OAASS,EAAa,IAAMC,EAmDrCM,CAAaZ,EAAOE,EAAiBG,EAAYC,EAAaC,GAAY,GAGrEP,EAOT,IAAIa,GAAsB,IAAI7lB,IAAI,CAAC,gBAAiB,kBAAmB,eAAgB,mBAAoB,aAAc,WAAY,oBAAqB,eAAgB,cAAe,aAAc,UAAW,UAAW,eAAgB,mBAAoB,mBAAoB,eAAgB,cAAe,YAChT8lB,GAAqB,kBAMrBC,GAAc,SAAqBC,GACrC,OAAOA,EAAIvM,QAAQqM,GANE,SAMoCG,eAQvDC,GAEJ,SAAUtF,GAGR,SAASsF,IACP,IAAI9lB,EAAmB,OAAXwgB,GAAmBA,EAAOhN,MAAM9T,KAAM+gB,YAAc/gB,KAqBhE,OAdAM,EAAM4kB,MAAQ,GAKd5kB,EAAM0gB,cAAgB,CACpBnG,4BAA4B,GAO9Bva,EAAM+T,OAAS/T,EAAM0gB,cACd1gB,EAuET,OA/FA,YAAU8lB,EAAkBtF,GAiC5BsF,EAAiBjmB,UAAUuU,MAAQ,SAAUD,GAC3CqM,EAAO3gB,UAAUuU,MAAMnT,KAAKvB,KAAMyU,GAElCzU,KAAKqmB,WAOPD,EAAiBjmB,UAAUkmB,QAAU,WACnC,IACErmB,KAAKmlB,WAA6C,mBAAzBnlB,KAAKyU,QAAQ6R,QAAyBtmB,KAAKyU,QAAQ6R,UAAYtmB,KAAKyU,QAAQ2J,wBACrG,MAAOmI,GAEPvmB,KAAKmlB,WAAa,CAChBpe,EAAG,EACHC,EAAG,EACHmF,MAAO,EACPE,OAAQ,GA+Ca,SA3CdrM,KAAKyU,QA2CH+R,UA1CXxmB,KAAKolB,gBAAkBplB,KAAKyU,QAAQgS,mBAQxCL,EAAiBjmB,UAAU2hB,MAAQ,WACjChB,EAAO3gB,UAAU2hB,MAAMvgB,KAAKvB,MAE5BA,KAAKklB,MAAQ,IAOfkB,EAAiBjmB,UAAU4hB,KAAO,SAAUlc,GAE1C,OADAA,EAAOkgB,GAAoB9S,IAAIpN,GAA0BA,EAAnBogB,GAAYpgB,GAC3C7F,KAAKyU,QAAQiS,aAAa7gB,IAGnCugB,EAAiBjmB,UAAUmkB,MAAQ,WACjCtkB,KAAKokB,wBACLa,GAAcjlB,KAAKkU,OAAQlU,KAAKsa,MAAOta,KAAKua,KAAMva,KAAKklB,MAAOllB,KAAK4K,UAAW5K,KAAKwa,gBAAiBxa,KAAKya,cAAeza,KAAKqU,OAAQrU,KAAKmlB,WAAYnlB,KAAKolB,gBAAiBplB,KAAK0a,6BAA+B1a,KAAK4W,IAAK5W,KAAKqC,MAAOrC,KAAK2a,WAAY3a,KAAK8X,UAAW9X,KAAKshB,iBAG9Q8E,EAAiBjmB,UAAU+B,OAAS,WAKlC,IAAK,IAAI2D,KAHTib,EAAO3gB,UAAU+B,OAAOX,KAAKvB,MAGbA,KAAKklB,MACnBllB,KAAKyU,QAAQkS,aAAcZ,GAAoB9S,IAAIpN,GAA0BA,EAAnBogB,GAAYpgB,GAAY7F,KAAKklB,MAAMrf,KAI1FugB,EAhGT,CAiGEvF,IAcF,IACI+F,GAAc,IAAI1mB,IADJ,CAAC,UAAW,SAAU,WAAY,OAAQ,OAAQ,UAAW,UAAW,gBAAiB,sBAAuB,cAAe,mBAAoB,oBAAqB,oBAAqB,iBAAkB,eAAgB,UAAW,UAAW,UAAW,UAAW,UAAW,iBAAkB,UAAW,UAAW,cAAe,eAAgB,WAAY,eAAgB,qBAAsB,cAAe,SAAU,eAAgB,SAAU,gBAAiB,IAAK,QAAS,OAAQ,iBAAkB,SAAU,OAAQ,WAAY,OAAQ,UAAW,UAAW,WAAY,iBAAkB,OAAQ,OAAQ,MAAO,SAAU,SAAU,OAAQ,WAAY,QAAS,MAAO,SAStrB,SAAS2mB,GAAeC,GACtB,MAA4B,iBAAdA,GAA0BF,GAAY3T,IAAI6T,GAO1D,IAAIC,GAAkB,wBAAc,MAChCC,GAAgB,wBAAc,CAChCC,eAAgB,KAGlB,SAASC,KACP,OAAO,qBAAWF,IAAeC,eAGnC,SAASE,KACP,OAAO,qBAAWH,IAAe9X,cASnC,IA0CIkY,GAAmB,IAAIlnB,IAAI,CAAC,UAAW,UAAW,OAAQ,QAAS,WAAY,aAAc,oBAAqB,kBAAmB,SAAU,UAAW,SAAU,WAAY,4BAA6B,sBAAuB,mBAAoB,sBAAuB,WAAY,cAAe,SAAU,YAAa,2BAA4B,kBAAmB,sBAAuB,OAAQ,eAAgB,eAAgB,kBAAmB,oBAAqB,SAAU,SAAU,cAAe,eAAgB,kBAAmB,iBAAkB,QAAS,aAAc,WAAY,oBAAqB,QAAS,aAAc,cAAe,aAAc,WAAY,aAAc,iBAUzrB,SAASmnB,GAAkBxhB,GACzB,OAAOuhB,GAAiBnU,IAAIpN,GAG9B,IAAIyhB,GAAc,SAAqBzhB,GACrC,OAAQwhB,GAAkBxhB,IAiB5B,IACE,IAAI0hB,GAAuB,EAAQ,QAA0B3f,QAE7D0f,GAAc,SAAqBzhB,GAEjC,OAAIA,EAAIE,WAAW,OACTshB,GAAkBxhB,GAEnB0hB,GAAqB1hB,IAGhC,MAAOhF,KA8DT,IAAI2mB,GAAgB,SAAuBrmB,GACzC,OAAOA,aAAiBM,GAG1B,SAASgmB,GAAoB5hB,EAAKhF,GAChC,IAAI6mB,EAAS7mB,EAAG6mB,OACZC,EAAW9mB,EAAG8mB,SAClB,OAAOlQ,GAAgB5R,IAAQ8R,GAAsB9R,KAAS6hB,QAAuB/hB,IAAbgiB,MAA6BxO,GAAqBtT,GAmD5H,SAAS+hB,GAAgB1Y,EAAe/M,EAAMqb,EAAQqK,EAASC,GAO7D,IAAK,IAAIjiB,UANO,IAAZgiB,IACFA,GAAU,GAGRA,IAAS3Y,EAAc+R,WAAa,IAExBzD,EAAQ,CACtB,IAAIrc,EAAQqc,EAAO3X,GACfkiB,GAAmB,EAEvB,GAAIP,GAAcrmB,GAEX6mB,GAAc/U,IAAIpN,KACrBqJ,EAAcY,SAASjK,EAAK1E,GAC5B4mB,GAAmB,QAEhB,GAAIN,GAAoB5hB,EAAKiiB,GAAQ,CAG1C,GAAK5Y,EAAcU,SAAS/J,IAErB,GAAI1E,IAAUgB,EAAK0D,GAAM,CAC9B,GAAI2hB,GAAcrlB,EAAK0D,IAKrBqJ,EAAcY,SAASjK,EAAK7B,EAAY7C,SAK3B+N,EAAcW,SAAShK,GAC7BnD,IAAIvB,SAbb+N,EAAcY,SAASjK,EAAK7B,EAAY7C,IAiB1C4mB,GAAmB,OACVF,IACT3Y,EAAc+R,WAAWpb,GAAO1E,GAG9B4mB,IAAkB5lB,EAAK0D,GAAO1E,IAStC,IA6GI8mB,GAQAC,GArHAF,GAAgB,IAAI9nB,IAAI,IAExBioB,GAAQ,WACV,MAAO,IAOLC,GAAsB,wBAAc,CACtCrK,mBAAoB,SAA4BsK,GAC9C,OAAOA,GAETC,SAAU,GACVC,UAAU,IAoDZ,SAASC,GAA0B3nB,GACjC,IAAI4nB,EAAU5nB,EAAG4nB,QACbzT,EAAWnU,EAAGmU,SACd0T,EAAU7nB,EAAG6nB,QACjB,YAAmB/iB,IAAZ+iB,IAA0B1T,IAAayT,EAAUC,GAwC1D,SAAWT,GACTA,EAASA,EAAmB,SAAI,GAAK,WACrCA,EAASA,EAAkB,QAAI,GAAK,UACpCA,EAASA,EAAkB,QAAI,GAAK,UAHtC,CAIGA,KAAaA,GAAW,KAI3B,SAAWC,GACTA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAuB,KAAI,GAAK,OAFnD,CAGGA,KAAqBA,GAAmB,KAM3C,IAAIS,GAAiB,CACnBtF,cAAe,SAAuB3S,GACpC,OAAOA,EAAM2S,iBAEfT,YAAa,SAAqBlS,GAChC,OAAOA,EAAMkS,gBAObgG,GAAc,SAAqBnoB,EAAGC,GACxC,OAAOD,EAAEsU,MAAQrU,EAAEqU,OAOrB,SAAS8T,KACP,IAAIC,EAAQ,IAAI5oB,IA0ChB,MAAO,CACLE,IAzCQ,SAAasQ,GACrB,OAAOoY,EAAM1oB,IAAIsQ,IAyCjBqY,MAtCU,SAAeloB,GACzB,IAAIE,OAAY,IAAPF,EAAgB8nB,GAAiB9nB,EACtCwiB,EAAgBtiB,EAAGsiB,cACnBT,EAAc7hB,EAAG6hB,YAEjBoG,EAAQ5jB,MAAMyD,KAAKigB,GAAOrN,KAAKmN,IAKnCI,EAAMzY,SAAQ,SAAUG,GACtB,OAAOA,EAAMgT,oBAMfsF,EAAMzY,QAAQ8S,GAKd2F,EAAMzY,QAAQqS,GAQdoG,EAAMzY,SAAQ,SAAUG,GAClBA,EAAMuY,YAAWvY,EAAMwY,SAAWjB,GAASkB,YAEjDL,EAAMtnB,UASV,SAAS4nB,GAAeC,GACtB,QAASA,EAAQC,YAGnB,IAAIC,GAAsB,wBAAcV,MAEpCW,GAD8B,oBAAX/Q,OACqB,kBAAkB,YAqC9D,SAASgR,KACP,IAAIJ,EAAU,qBAAWtC,IACzB,GAAgB,OAAZsC,EAAkB,MAAO,EAAC,EAAM,MACpC,IAAIJ,EAAYI,EAAQJ,UACpBS,EAAiBL,EAAQK,eACzBC,EAAWN,EAAQM,SAInBC,EAAKC,KACT,qBAAU,WACR,OAAOF,EAASC,KACf,IAMH,OAAQX,GAAaS,EAAiB,EAAC,EAJpB,WACjB,OAAOA,aAAuD,EAASA,EAAeE,KAG1B,EAAC,GA4BjE,SAASX,GAAUI,GACjB,OAAmB,OAAZA,GAA0BA,EAAQJ,UAG3C,IAAIa,GAAU,EAEVC,GAAc,WAChB,OAAOD,MAGLD,GAAc,WAChB,OAAOnF,GAAYqF,KAarB,SAASC,GAAwBrU,EAAUsU,QACnB,IAAlBA,IACFA,GAAgB,GAGlB,IAAIC,EAAkB,kBAAO,KAExBD,GAAiBA,GAAiBC,EAAgB9nB,UACrDuT,IAGFuU,EAAgB9nB,SAAU,EA+G5B,SAAS+nB,GAAiBloB,GACxB,MAAoB,iBAANA,GAAkBmD,MAAMC,QAAQpD,GAGhD,SAASmoB,GAAoBnoB,GAC3B,MAAoB,iBAANA,GAAqC,mBAAZA,EAAEqB,MAe3C,SAAS+mB,GAAsBvD,EAAWjmB,GACxC,IAAIypB,EAAkBzpB,EAAGypB,gBACrBC,EAAmB1pB,EAAG0pB,iBACtBroB,EAASrB,EAAGqB,OA0DhB,OAAO,sBAxDP,SAAyB4lB,EAAOlT,GAO9B,IAAI2T,EAAW,qBAAWH,IAAqBG,SAQ3CrZ,EAAgBqb,EAAiBzD,EAAWgB,EAAOS,EAAU3T,IAvjBrE,SAAyB1F,EAAe4Y,GACtC,IAAI3lB,EAAOuiB,GAAYyD,IAKvB,IAAK,IAAItiB,KAAO1D,EAAM,CACpB,IAAIqoB,EAAW/C,GAAoB5hB,EAAKiiB,GACpC2C,OAA8B9kB,IAAfmiB,EAAMjiB,GACrB6kB,EAAgB5C,EAAMxN,YAA8B3U,IAArBmiB,EAAMxN,MAAMzU,GAC3C8kB,EAAoBF,GAAgBjD,GAAcM,EAAMjiB,IACxD+kB,EAAqBF,GAAiBlD,GAAcM,EAAMxN,MAAMzU,KAC7C2kB,IAAaC,IAAiBC,IAC3BF,IAAaG,IAAsBC,KAG3D1b,EAAcqG,YAAY1P,UACnB1D,EAAK0D,IAQhB+hB,GAAgB1Y,EAAe/M,EAAM2lB,GAAO,EAAOA,GAC/CA,EAAMxN,OAAOsN,GAAgB1Y,EAAe/M,EAAM2lB,EAAMxN,OAAO,EAAMwN,GAMrEA,EAAM3F,kBACRjT,EAAc+R,WAAa6G,EAAM3F,gBAAgBjT,EAAc+R,aA2hB/D4J,CAAgB3b,EAAe4Y,GAK/B,IAAIb,EAzJR,SAAqB/X,EAAerO,EAAI0nB,GACtC,IAAIxnB,EAAIC,EAEJgU,EAAWnU,EAAGmU,SACd8V,EAAUjqB,EAAGiqB,QACbrC,EAAU5nB,EAAG4nB,QACbsC,EAAWlqB,EAAGkqB,SACdC,EAAanqB,EAAGmqB,WAEhB3gB,EAAK6c,KACLlT,EAAS3J,EAAG2J,OACZiX,EAAgB5gB,EAAGygB,QACnBI,EAAgB7gB,EAAGoe,QAEnB0C,EAAkB,qBAAWpE,IAW7BqE,EAAmBjB,GAAiB1B,IAAY0B,GAAiBY,IAAaZ,GAAiBa,IAAeZ,GAAoB3B,GAClI4C,EAAgBrW,GAAYoW,GAWhB,KANhBN,EAA+G,QAApG/pB,EAAKoqB,aAAyD,EAASA,EAAgBL,eAA4B,IAAP/pB,EAAgBA,EAAK+pB,IAMlHV,GAAoB3B,KAC5CqC,EAAUrC,GAGZ,IAAIY,EAAU,mBAAQ,WACpB,MAAO,CACLrV,OAAQqX,EAAgBnc,EAAgB8E,EACxC8W,QAASX,GAAiBW,GAAWA,EAAUG,EAC/CxC,QAAS0B,GAAiB1B,GAAWA,EAAUyC,KAOnD,CAAC3C,EAAWuC,EAAU,OAgDtB,OA7CAd,IAAwB,WACtB,IAAIsB,EAAiBR,GAAWG,EAChCK,GAAkB3a,EAAUzB,EAAeoc,MACzC/C,GAKJ8C,IAAkBD,IAAqBpX,SAAgDA,EAAOiB,gBAAgB/F,IAM9G+Z,GAAUkC,KAAmE,QAA7CnqB,EAAKkO,EAAckD,4BAAyC,IAAPpR,GAAyBA,EAAGQ,SAKjH,qBAAU,WACR6pB,IAAkBrX,SAAgDA,EAAOkB,qBAAqBhG,OAOhG,qBAAU,WAER,OADAA,EAAcoF,WAAY,EACnB,WACL,IAAIzT,EAEJqO,EAAcoF,WAAY,EACwD,QAAjFzT,EAAKmT,aAAuC,EAASA,EAAOvD,uBAAoC,IAAP5P,GAAyBA,EAAGN,OAAO2O,MAE9H,IAKH8a,IAAwB,WACtB9a,EAAcM,cAAa,SAAUrO,EAAO0E,GAC1CqJ,EAAciB,WAAWtK,GAAO1E,EAAM8B,YAEvC,GACIomB,EAqDgBkC,CAAYrc,EAAe4Y,EAAOS,GAKnDD,EAzZR,SAAqBgC,EAAiB/B,EAAUrZ,EAAe4Y,GAC7D,IAAI0D,EAAU,qBAAWpD,IAGzB,GAAIG,GAA8B,oBAAX9P,OAAwB,OAAO,KAOtD,IALA,IAAIgT,EAAc,YAASnB,EAAiBkB,EAAQlD,UAEhDoD,EAAcD,EAAYnmB,OAC1BgjB,EAAW,GAENtX,EAAI,EAAGA,EAAI0a,EAAa1a,IAAK,CACpC,IAAInQ,EAAK4qB,EAAYza,GACjB2a,EAAe9qB,EAAG8qB,aAClB9lB,EAAMhF,EAAGgF,IACT+lB,EAAe/qB,EAAG+qB,aAEtB,GAAID,EAAa7D,GAAQ,CACvB,IAAIhB,EAAY8E,EAAa9D,GAC7BhB,GAAawB,EAAS7V,KAAK,wBAAcqU,EAAW,YAAS,CAC3DjhB,IAAKA,GACJiiB,EAAO,CACR5Y,cAAeA,EACfwZ,QAASF,GAA0BV,QAKzC,OAAOQ,EA6XUuD,CAAYvB,EAAiB/B,EAAUrZ,EAAe4Y,GAKjEuB,EAAU,mBAAQ,WACpB,MAAO,CACLna,cAAeA,EACf+X,eAAgBA,KAEjB,CAAC/X,EAAe+X,IACf6E,EAAY5pB,EAAO4kB,EAAWgB,EAAO5Y,GAUzC,OA/SJ,SAA8BA,GAC5B,IAAI6c,EAAa,qBAAWxC,IAC5BC,IAA0B,WACxB,OAAO,WACDJ,GAAe2C,IACjBA,EAAWC,OAAO9c,MAGrB,IAoSD+c,CAAqB/c,GAGd,wBAAc,WAAU,KAAM,wBAAc8X,GAAckF,SAAU,CACzE/qB,MAAOkoB,GACNyC,GAAYxD,MAMnB,SAAS6D,GAAWC,GAClB,IAAIC,EAAO,KACX,OAAO,WAKL,OAAa,OAATA,IACFA,EAAOD,EALM,WACbC,EAAO,QAYb,IAAIC,GAAuBH,GAAW,kBAClCI,GAAqBJ,GAAW,gBAEpC,SAASK,GAAcC,GACrB,IAAIJ,GAAO,EAEX,GAAa,MAATI,EACFJ,EAAOE,UACF,GAAa,MAATE,EACTJ,EAAOC,SACF,CACL,IAAII,EAAmBJ,KACnBK,EAAiBJ,KAEjBG,GAAoBC,EACtBN,EAAO,WACLK,IACAC,MAIED,GAAkBA,IAClBC,GAAgBA,KAIxB,OAAON,EAGT,SAASO,GAAYpjB,EAAQqjB,EAAWxsB,EAAS8H,GAE/C,OADAqB,EAAOsjB,iBAAiBD,EAAWxsB,EAAS8H,GACrC,WACL,OAAOqB,EAAOujB,oBAAoBF,EAAWxsB,EAAS8H,IAoC1D,SAAS6kB,GAAaC,GAEpB,MAA4B,oBAAjBC,cAAgCD,aAAiBC,eAC1B,UAAtBD,EAAME,aAGXF,aAAiBG,WAG1B,SAASC,GAAaJ,GAEpB,QADmBA,EAAMK,QAoB3B,IAAIC,GAAmB,CACrBC,MAAO,EACPC,MAAO,GAGT,SAASC,GAAenH,EAAGoH,QACP,IAAdA,IACFA,EAAY,QAGd,IACIvR,EADemK,EAAE+G,QAAQ,IAAM/G,EAAEqH,eAAe,IACxBL,GAC5B,MAAO,CACLxmB,EAAGqV,EAAMuR,EAAY,KACrB3mB,EAAGoV,EAAMuR,EAAY,MAIzB,SAASE,GAAezR,EAAOuR,GAK7B,YAJkB,IAAdA,IACFA,EAAY,QAGP,CACL5mB,EAAGqV,EAAMuR,EAAY,KACrB3mB,EAAGoV,EAAMuR,EAAY,MAIzB,SAASG,GAAiBb,EAAOU,GAK/B,YAJkB,IAAdA,IACFA,EAAY,QAGP,CACLvR,MAAOiR,GAAaJ,GAASS,GAAeT,EAAOU,GAAaE,GAAeZ,EAAOU,IAI1F,SAASI,GAA0Bd,GACjC,OAAOa,GAAiBb,EAAO,UAGjC,IAAIe,GAAc,SAAqB3tB,EAAS4tB,QACX,IAA/BA,IACFA,GAA6B,GAG/B,IA3D4BC,EA2DxBC,EAAW,SAAkBlB,GAC/B,OAAO5sB,EAAQ4sB,EAAOa,GAAiBb,KAGzC,OAAOgB,GA/DqBC,EA+D6BC,EA9DlD,SAAUlB,GACf,IAAID,EAAeC,aAAiBG,aACZJ,GAAgBA,GAAiC,IAAjBC,EAAMmB,SAG5DF,EAAajB,KAyDoDkB,GAGnEE,GAAgC,oBAAX5V,OAcrB6V,GAAkB,CACpBC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,cAAe,cACfC,YAAa,YACbC,WAAY,WACZC,aAAc,aACdC,aAAc,cAEZC,GAAkB,CACpBR,YAAa,aACbC,YAAa,YACbC,UAAW,WACXC,cAAe,eAGjB,SAASM,GAAoB5C,GAC3B,OA7BOiC,IAAwC,OAAzB5V,OAAOwW,cA8BpB7C,EA1BFiC,IAAuC,OAAxB5V,OAAOyW,aA4BpBH,GAAgB3C,GAxBlBiC,IAAsC,OAAvB5V,OAAO0W,YA0BpBb,GAAgBlC,GAGlBA,EAGT,SAASgD,GAAgB5lB,EAAQqjB,EAAWxsB,EAAS8H,GACnD,OAAOykB,GAAYpjB,EAAQwlB,GAAoBnC,GAAYmB,GAAY3tB,EAAuB,gBAAdwsB,GAA8B1kB,GAGhH,SAASknB,GAAgBxvB,EAAKgtB,EAAWxsB,EAAS8H,GAChD,OA/IF,SAAqBtI,EAAKgtB,EAAWxsB,EAAS8H,GAC5C,qBAAU,WACR,IAAIsM,EAAU5U,EAAIuC,QAElB,GAAI/B,GAAWoU,EACb,OAAOmY,GAAYnY,EAASoY,EAAWxsB,EAAS8H,KAEjD,CAACtI,EAAKgtB,EAAWxsB,EAAS8H,IAwItBmnB,CAAYzvB,EAAKmvB,GAAoBnC,GAAYxsB,GAAW2tB,GAAY3tB,EAAuB,gBAAdwsB,GAA8B1kB,GAOxH,IAAIonB,GAEJ,WACE,SAASA,EAAWtC,EAAOuC,EAAU3uB,GACnC,IAAIP,EAAQN,KAER+d,QAA6B,IAAPld,EAAgB,GAAKA,GAAIkd,mBA6EnD,GAxEA/d,KAAKyvB,WAAa,KAKlBzvB,KAAK0vB,cAAgB,KAKrB1vB,KAAK2vB,kBAAoB,KAKzB3vB,KAAKwvB,SAAW,GAEhBxvB,KAAK4vB,YAAc,WACjB,GAAMtvB,EAAMovB,eAAiBpvB,EAAMqvB,kBAAnC,CACA,IAAIE,EAAOC,GAAWxvB,EAAMqvB,kBAAmBrvB,EAAMyvB,SACjDC,EAAoC,OAArB1vB,EAAMmvB,WAIrBQ,EAA0B,YAASJ,EAAKznB,OAAQ,CAClDrB,EAAG,EACHC,EAAG,KACC,EACN,GAAKgpB,GAAiBC,EAAtB,CACA,IAAI7T,EAAQyT,EAAKzT,MACb9Z,EAAY,cAAeA,UAE/BhC,EAAMyvB,QAAQtd,KAAK,YAAS,YAAS,GAAI2J,GAAQ,CAC/C9Z,UAAWA,KAGb,IAAIzB,EAAKP,EAAMkvB,SACXU,EAAUrvB,EAAGqvB,QACbC,EAAStvB,EAAGsvB,OAEXH,IACHE,GAAWA,EAAQ5vB,EAAMovB,cAAeG,GACxCvvB,EAAMmvB,WAAanvB,EAAMovB,eAG3BS,GAAUA,EAAO7vB,EAAMovB,cAAeG,MAGxC7vB,KAAKowB,kBAAoB,SAAUnD,EAAO4C,GACxCvvB,EAAMovB,cAAgBzC,EACtB3sB,EAAMqvB,kBAAoB3R,GAAe6R,EAAMvvB,EAAMyd,oBAEjDiP,GAAaC,IAA4B,IAAlBA,EAAMoD,QAC/B/vB,EAAMgwB,gBAAgBrD,EAAO4C,GAM/B,IAAKtb,OAAOjU,EAAMsvB,aAAa,IAGjC5vB,KAAKswB,gBAAkB,SAAUrD,EAAO4C,GACtCvvB,EAAMiwB,MAEN,IAAIC,EAAQlwB,EAAMkvB,SAASgB,MAC3B,GAAKA,EAAL,CACA,IAAIC,EAAUX,GAAW9R,GAAe6R,EAAMvvB,EAAMyd,oBAAqBzd,EAAMyvB,SAC/ES,GAASA,EAAMvD,EAAOwD,OAIpBpD,GAAaJ,IAAUA,EAAMK,QAAQhoB,OAAS,GAAlD,CACAtF,KAAKwvB,SAAWA,EAChBxvB,KAAK+d,mBAAqBA,EAC1B,IACI2S,EAAc1S,GADP8P,GAAiBb,GACWjtB,KAAK+d,oBACxC3B,EAAQsU,EAAYtU,MACpB9Z,EAAY,cAAeA,UAC/BtC,KAAK+vB,QAAU,CAAC,YAAS,YAAS,GAAI3T,GAAQ,CAC5C9Z,UAAWA,KAEb,IAAIquB,EAAiBnB,EAASmB,eAC9BA,GAAkBA,EAAe1D,EAAO6C,GAAWY,EAAa1wB,KAAK+vB,UACrE/vB,KAAK4wB,gBAAkB,YAAKxB,GAAgB3W,OAAQ,cAAezY,KAAKowB,mBAAoBhB,GAAgB3W,OAAQ,YAAazY,KAAKswB,iBAAkBlB,GAAgB3W,OAAQ,gBAAiBzY,KAAKswB,mBAYxM,OATAf,EAAWpvB,UAAU0wB,eAAiB,SAAUrB,GAC9CxvB,KAAKwvB,SAAWA,GAGlBD,EAAWpvB,UAAUowB,IAAM,WACzBvwB,KAAK4wB,iBAAmB5wB,KAAK4wB,kBAC7B,IAAWrc,OAAOvU,KAAK4vB,cAGlBL,EAzGT,GA4GA,SAASvR,GAAe6R,EAAM9R,GAC5B,OAAOA,EAAqB,CAC1B3B,MAAO2B,EAAmB8R,EAAKzT,QAC7ByT,EAGN,SAASiB,GAAcrwB,EAAGC,GACxB,MAAO,CACLqG,EAAGtG,EAAEsG,EAAIrG,EAAEqG,EACXC,EAAGvG,EAAEuG,EAAItG,EAAEsG,GAIf,SAAS8oB,GAAWjvB,EAAIkvB,GACtB,IAAI3T,EAAQvb,EAAGub,MACf,MAAO,CACLA,MAAOA,EACP/Z,MAAOyuB,GAAc1U,EAAO2U,GAAgBhB,IAC5C3nB,OAAQ0oB,GAAc1U,EAAO4U,GAAiBjB,IAC9C7lB,SAAU+mB,GAAclB,EAAS,KAIrC,SAASiB,GAAiBjB,GACxB,OAAOA,EAAQ,GAGjB,SAASgB,GAAgBhB,GACvB,OAAOA,EAAQA,EAAQzqB,OAAS,GAGlC,SAAS2rB,GAAclB,EAASpuB,GAC9B,GAAIouB,EAAQzqB,OAAS,EACnB,MAAO,CACLyB,EAAG,EACHC,EAAG,GAQP,IAJA,IAAIgK,EAAI+e,EAAQzqB,OAAS,EACrB4rB,EAAmB,KACnBC,EAAYJ,GAAgBhB,GAEzB/e,GAAK,IACVkgB,EAAmBnB,EAAQ/e,KAEvBmgB,EAAU7uB,UAAY4uB,EAAiB5uB,UAAY2B,EAAsBtC,MAI7EqP,IAGF,IAAKkgB,EACH,MAAO,CACLnqB,EAAG,EACHC,EAAG,GAIP,IAAIoqB,GAAQD,EAAU7uB,UAAY4uB,EAAiB5uB,WAAa,IAEhE,GAAa,IAAT8uB,EACF,MAAO,CACLrqB,EAAG,EACHC,EAAG,GAIP,IAAIqqB,EAAkB,CACpBtqB,GAAIoqB,EAAUpqB,EAAImqB,EAAiBnqB,GAAKqqB,EACxCpqB,GAAImqB,EAAUnqB,EAAIkqB,EAAiBlqB,GAAKoqB,GAW1C,OARIC,EAAgBtqB,IAAMuqB,MACxBD,EAAgBtqB,EAAI,GAGlBsqB,EAAgBrqB,IAAMsqB,MACxBD,EAAgBrqB,EAAI,GAGfqqB,EAST,SAASE,GAAiBnV,EAAOvb,EAAI2wB,GACnC,IAAI9a,EAAM7V,EAAG6V,IACT7C,EAAMhT,EAAGgT,IAUb,YARYlO,IAAR+Q,GAAqB0F,EAAQ1F,EAE/B0F,EAAQoV,EAAU,YAAI9a,EAAK0F,EAAOoV,GAAW3mB,KAAKgJ,IAAIuI,EAAO1F,QAC5C/Q,IAARkO,GAAqBuI,EAAQvI,IAEtCuI,EAAQoV,EAAU,YAAI3d,EAAKuI,EAAOoV,GAAW3mB,KAAK6L,IAAI0F,EAAOvI,IAGxDuI,EAwBT,SAASqV,GAA4B1Y,EAAMrC,EAAK7C,GAC9C,MAAO,CACL6C,SAAa/Q,IAAR+Q,EAAoBqC,EAAKrC,IAAMA,OAAM/Q,EAC1CkO,SAAalO,IAARkO,EAAoBkF,EAAKlF,IAAMA,GAAOkF,EAAKlF,IAAMkF,EAAKrC,UAAO/Q,GAwBtE,SAAS+rB,GAA4BC,EAAYC,GAC/C,IAAI/wB,EAEA6V,EAAMkb,EAAgBlb,IAAMib,EAAWjb,IACvC7C,EAAM+d,EAAgB/d,IAAM8d,EAAW9d,IAO3C,OAJI+d,EAAgB/d,IAAM+d,EAAgBlb,IAAMib,EAAW9d,IAAM8d,EAAWjb,MAC9CA,GAA5B7V,EAAK,YAAO,CAACgT,EAAK6C,GAAM,IAAa,GAAI7C,EAAMhT,EAAG,IAG7C,CACL6V,IAAKib,EAAWjb,IAAMA,EACtB7C,IAAK8d,EAAWjb,IAAM7C,GA8C1B,IAKIge,GALAC,GAAsB,IAAIC,QAO1BC,GAEJ,WACE,SAASA,EAA0BnxB,GACjC,IAAIqO,EAAgBrO,EAAGqO,cAOvBlP,KAAKiyB,YAAa,EAOlBjyB,KAAKkyB,iBAAmB,KAOxBlyB,KAAKmyB,aAAc,EAOnBnyB,KAAK8nB,MAAQ,GAKb9nB,KAAKoyB,uBAAwB,EAS7BpyB,KAAKqyB,eAAiB,CACpBtrB,EAAG,GACHC,EAAG,IAILhH,KAAK+W,YAAc,GAInB/W,KAAKsyB,eAAiB,KAKtBtyB,KAAKuyB,WAAa,KAClBvyB,KAAKkP,cAAgBA,EACrBlP,KAAKkP,cAAcmT,yBACnByP,GAAoBpvB,IAAIwM,EAAelP,MA4fzC,OAnfAgyB,EAA0B7xB,UAAUmD,MAAQ,SAAUkvB,EAAa3xB,GACjE,IAAIP,EAAQN,KAERe,OAAY,IAAPF,EAAgB,GAAKA,EAC1BG,EAAKD,EAAG0xB,aACRA,OAAsB,IAAPzxB,GAAwBA,EACvCqxB,EAAiBtxB,EAAGsxB,eAQxBI,GAAgBzyB,KAAKyyB,aAAaD,GAElC,IA+GIzU,EAAqB/d,KAAK8nB,MAAM/J,mBACpC/d,KAAKuyB,WAAa,IAAIhD,GAAWiD,EAAa,CAC5C7B,eAjHmB,WAGnBrwB,EAAMoyB,cA+GNxC,QA5GY,SAAiBjD,EAAO4C,GACpC,IAAIhvB,EAAIE,EAGJC,EAAKV,EAAMwnB,MACX2E,EAAOzrB,EAAGyrB,KACVkG,EAAkB3xB,EAAG2xB,gBAEzB,IAAIlG,GAASkG,IACPryB,EAAMgyB,gBAAgBhyB,EAAMgyB,iBAChChyB,EAAMgyB,eAAiB9F,GAAcC,GAEhCnsB,EAAMgyB,gBAJb,CAcAhyB,EAAMsyB,qBAENtyB,EAAM4O,cAAcqU,gBAQpBjjB,EAAMuyB,yBAcN,IAAIzW,EAAQ2R,GAA0Bd,GAAO7Q,MAC7CyB,IAAS,SAAU9E,GACjB,IAAIlY,EAAKP,EAAM4O,cAAc0L,UAAU7B,GACnCrC,EAAM7V,EAAG6V,IACT7C,EAAMhT,EAAGgT,IACbvT,EAAM+xB,eAAetZ,GAAQsZ,EAAiBA,EAAetZ,GAAQ,YAASrC,EAAK7C,EAAKuI,EAAMrD,IAM9F,IAAI+Z,EAAYxyB,EAAMyyB,mBAAmBha,GAErC+Z,IACFxyB,EAAMyW,YAAYgC,GAAQ+Z,EAAU7vB,UAIxC3C,EAAM2xB,YAAa,EACnB3xB,EAAM4xB,iBAAmB,KAEiB,QAAzCnxB,GAAMF,EAAKP,EAAMwnB,OAAOkL,mBAAgC,IAAPjyB,GAAyBA,EAAGQ,KAAKV,EAAIosB,EAAO4C,KA0C9FM,OAvCW,SAAgBlD,EAAO4C,GAClC,IAAIhvB,EAAIE,EAAIC,EAAIqJ,EAEZC,EAAKhK,EAAMwnB,MACX6K,EAAkBroB,EAAGqoB,gBACrBM,EAAoB3oB,EAAG2oB,kBAE3B,GAAKN,GAAoBryB,EAAMgyB,eAA/B,CACA,IAAIlqB,EAASynB,EAAKznB,OAElB,GAAI6qB,GAAgD,OAA3B3yB,EAAM4xB,iBAO7B,OANA5xB,EAAM4xB,iBA2Zd,SAA6B9pB,EAAQ8qB,QACb,IAAlBA,IACFA,EAAgB,IAGlB,IAAIC,EAAY,KAEZtoB,KAAKuoB,IAAIhrB,EAAOpB,GAAKksB,EACvBC,EAAY,IACHtoB,KAAKuoB,IAAIhrB,EAAOrB,GAAKmsB,IAC9BC,EAAY,KAGd,OAAOA,EAxawBE,CAAoBjrB,QAEd,OAA3B9H,EAAM4xB,mBACsC,QAA7CnxB,GAAMF,EAAKP,EAAMwnB,OAAOwL,uBAAoC,IAAPvyB,GAAyBA,EAAGQ,KAAKV,EAAIP,EAAM4xB,oBAOrG5xB,EAAMizB,WAAW,IAAKtG,EAAO7kB,GAE7B9H,EAAMizB,WAAW,IAAKtG,EAAO7kB,GAGQ,QAApCiC,GAAMrJ,EAAKV,EAAMwnB,OAAO0L,cAA2B,IAAPnpB,GAAyBA,EAAG9I,KAAKP,EAAIisB,EAAO4C,GAEzFgC,GAAmB5E,IAYnBuD,MATU,SAAevD,EAAO4C,GAChC,OAAOvvB,EAAMkD,KAAKypB,EAAO4C,KASxB,CACD9R,mBAAoBA,KAQxBiU,EAA0B7xB,UAAUyyB,mBAAqB,WACvD,IAAIne,EAAUzU,KAAKkP,cAAc0G,cAC7BhL,EAAY6J,EAAQ6F,MAAM1P,UAC9B5K,KAAKkP,cAAcwU,iBACnB1jB,KAAKkP,cAAcmU,gBACnB5O,EAAQ6F,MAAM1P,UAAYA,EAC1B5K,KAAKkP,cAAc+T,iBAAgB,EAAMjjB,KAAKkP,cAAc4T,oCAG9DkP,EAA0B7xB,UAAU0yB,uBAAyB,WAC3D,IAlT6BY,EAAW5yB,EACtC0L,EACAG,EACAD,EACAD,EA8SElM,EAAQN,KAER0zB,EAAkB1zB,KAAK8nB,MAAM4L,gBAG/B1zB,KAAKmyB,cADHuB,IACiB9zB,EAAY8zB,GAAmB1zB,KAAK2zB,sBAAsB3zB,KAAKkP,cAAc0H,IAAK8c,IAvT1ED,EAuTqHzzB,KAAKkP,cAAc0H,IAtTnKrK,GADsC1L,EAuTkI6yB,GAtT/JnnB,IACTG,EAAO7L,EAAG6L,KACVD,EAAS5L,EAAG4L,OACZD,EAAQ3L,EAAG2L,MACR,CACLzF,EAAG0qB,GAA4BgC,EAAU1sB,EAAG2F,EAAMF,GAClDxF,EAAGyqB,GAA4BgC,EAAUzsB,EAAGuF,EAAKE,MA0T7CzM,KAAKmyB,cAAgBnyB,KAAKoyB,uBAC5BvU,IAAS,SAAU9E,GAtQzB,IAA+B2O,EAAQyK,EACjCyB,EAsQMtzB,EAAMyyB,mBAAmBha,KAC3BzY,EAAM6xB,YAAYpZ,IAxQG2O,EAwQ2BpnB,EAAM4O,cAAc0H,IAAImC,GAxQ3CoZ,EAwQkD7xB,EAAM6xB,YAAYpZ,GAvQrG6a,EAAsB,QAEFjuB,IAApBwsB,EAAYzb,MACdkd,EAAoBld,IAAMyb,EAAYzb,IAAMgR,EAAOhR,UAG7B/Q,IAApBwsB,EAAYte,MACd+f,EAAoB/f,IAAMse,EAAYte,IAAM6T,EAAOhR,KAG9Ckd,QAmQP5B,EAA0B7xB,UAAUwzB,sBAAwB,SAAUF,EAAWtB,GAC/E,IAAItxB,EAAKb,KAAK8nB,MACV+L,EAA2BhzB,EAAGgzB,yBAC9B9V,EAAqBld,EAAGkd,mBACxB+V,EAAqB3B,EAAY/vB,QACrC,YAAiC,OAAvB0xB,EAA6B,0GACvC9zB,KAAK+zB,eAAiBjW,GAAegW,EAAoB/V,GACzD,IAAIiW,EA7SR,SAAiCP,EAAWM,GAC1C,MAAO,CACLhtB,EAAG2qB,GAA4B+B,EAAU1sB,EAAGgtB,EAAehtB,GAC3DC,EAAG0qB,GAA4B+B,EAAUzsB,EAAG+sB,EAAe/sB,IA0SjCitB,CAAwBR,EAAWzzB,KAAK+zB,gBAMlE,GAAIF,EAA0B,CAC5B,IAAIK,EAAkBL,EAnkH5B,SAAqChzB,GACnC,IAAIkG,EAAIlG,EAAGkG,EACPC,EAAInG,EAAGmG,EACX,MAAO,CACLuF,IAAKvF,EAAE0P,IACPjK,OAAQzF,EAAE6M,IACVnH,KAAM3F,EAAE2P,IACRlK,MAAOzF,EAAE8M,KA4jHwCsgB,CAA4BH,IAC3Eh0B,KAAKoyB,wBAA0B8B,EAE3BA,IACFF,EAAsBvd,GAA4Byd,IAItD,OAAOF,GAGThC,EAA0B7xB,UAAUi0B,WAAa,WAC/Cp0B,KAAKiyB,YAAa,EAClBjyB,KAAKuyB,YAAcvyB,KAAKuyB,WAAWhC,MACnCvwB,KAAKuyB,WAAa,MAEbvyB,KAAK8nB,MAAM6K,iBAAmB3yB,KAAKsyB,iBACtCtyB,KAAKsyB,iBACLtyB,KAAKsyB,eAAiB,OAI1BN,EAA0B7xB,UAAUqD,KAAO,SAAUypB,EAAO4C,GAC1D,IAAIhvB,EAEJb,KAAKkP,cAAcsU,kBACQ,QAA1B3iB,EAAKb,KAAKuyB,kBAA+B,IAAP1xB,GAAyBA,EAAG0vB,MAC/DvwB,KAAKuyB,WAAa,KAClB,IAAIN,EAAajyB,KAAKiyB,WAEtB,GADAjyB,KAAKo0B,aACAnC,EAAL,CACA,IAAIlxB,EAAKf,KAAK8nB,MACVuM,EAAetzB,EAAGszB,aAClBC,EAAcvzB,EAAGuzB,YACjBC,EAAYxzB,EAAGwzB,UAEnB,GAAIF,GAAgBC,EAAa,CAC/B,IAAIpqB,EAAW2lB,EAAK3lB,SACpBlK,KAAKw0B,eAAetqB,GAGtBqqB,SAAsDA,EAAUtH,EAAO4C,KAGzEmC,EAA0B7xB,UAAUsyB,aAAe,SAAUxF,GAC3D,IAAI3sB,EAAQN,KAEZA,KAAK4yB,qBACL/U,IAAS,SAAU9E,GACjB,IAAI+Z,EAAYxyB,EAAMyyB,mBAAmBha,GAEzC,GAAI+Z,EAAW,CACb,IAAI1W,EAAQ2R,GAA0Bd,GAAO7Q,MACzCxF,EAAMtW,EAAM4O,cAAc0H,IAC1B6d,EAAW7d,EAAImC,GAAMlF,IAAM+C,EAAImC,GAAMrC,IACrCge,EAAS9d,EAAImC,GAAMrC,IAAM+d,EAAW,EACpCrsB,EAASgU,EAAMrD,GAAQ2b,EAC3Bp0B,EAAMyW,YAAYgC,GAAQqD,EAAMrD,GAChC+Z,EAAUpwB,IAAI0F,QAEd9H,EAAM+xB,eAAetZ,GAAQ,GAE7BzY,EAAMq0B,wBAAwB5b,EAAMkU,OAS1C+E,EAA0B7xB,UAAUozB,WAAa,SAAUxa,EAAMkU,EAAO7kB,GAGtE,GAAKwsB,GAAW7b,EAFL/Y,KAAK8nB,MAAM2E,KAEMzsB,KAAKkyB,kBACjC,OAAOlyB,KAAK+yB,mBAAmBha,GAAQ/Y,KAAK60B,sBAAsB9b,EAAM3Q,GAAUpI,KAAK20B,wBAAwB5b,EAAMkU,IAGvH+E,EAA0B7xB,UAAU00B,sBAAwB,SAAU9b,EAAM3Q,GAC1E,IAAI0qB,EAAY9yB,KAAK+yB,mBAAmBha,GACxC,GAAK3Q,GAAW0qB,EAAhB,CACA,IAAIwB,EAAct0B,KAAK8nB,MAAMwM,YACzBQ,EAAY90B,KAAK+W,YAAYgC,GAAQ3Q,EAAO2Q,GAC5CxE,EAASvU,KAAKmyB,YAAcZ,GAAiBuD,EAAW90B,KAAKmyB,YAAYpZ,GAAOub,GAAeQ,EACnGhC,EAAUpwB,IAAI6R,KAGhByd,EAA0B7xB,UAAUw0B,wBAA0B,SAAU5b,EAAMkU,GAC5E,IAAIpsB,EAEAyzB,EAAct0B,KAAK8nB,MAAMwM,YAEzBS,EAAa/0B,KAAKkP,cAAc0H,IAAImC,GAGpCic,EAAaD,EAAWlhB,IAAMkhB,EAAWre,IAEzCiL,EAAe3hB,KAAKqyB,eAAetZ,GAGnCrC,EApdR,SAAiC0F,EAAO9W,EAAQue,EAAUsO,EAAaX,GAErE,IAAI9a,EAAM0F,EAAQ9W,EAASue,EAC3B,OAAOsO,EAAcZ,GAAiB7a,EAAKyb,EAAaX,GAAW9a,EAidvDue,CAFElH,GAA0Bd,GAAO7Q,MAELrD,GAAOic,EAAYrT,EAA0C,QAA3B9gB,EAAKb,KAAKmyB,mBAAgC,IAAPtxB,OAAgB,EAASA,EAAGkY,GAAOub,GAEhJt0B,KAAKkP,cAAckU,cAAcrK,EAAMrC,EAAKA,EAAMse,IAGpDhD,EAA0B7xB,UAAU+0B,YAAc,SAAUr0B,GAC1D,IAAIE,EAAKF,EAAG4rB,KACRA,OAAc,IAAP1rB,GAAwBA,EAC/BC,EAAKH,EAAGoyB,kBACRA,OAA2B,IAAPjyB,GAAwBA,EAC5CqJ,EAAKxJ,EAAG8xB,gBACRA,OAAyB,IAAPtoB,GAAwBA,EAC1CC,EAAKzJ,EAAG6yB,gBACRA,OAAyB,IAAPppB,GAAwBA,EAC1C6qB,EAAKt0B,EAAGyzB,YACRA,OAAqB,IAAPa,EAAgB,IAAOA,EACrCC,EAAKv0B,EAAGwzB,aACRA,OAAsB,IAAPe,GAAuBA,EACtCC,EAAiB,YAAOx0B,EAAI,CAAC,OAAQ,oBAAqB,kBAAmB,kBAAmB,cAAe,iBAEnHb,KAAK8nB,MAAQ,YAAS,CACpB2E,KAAMA,EACNwG,kBAAmBA,EACnBN,gBAAiBA,EACjBe,gBAAiBA,EACjBY,YAAaA,EACbD,aAAcA,GACbgB,IAYLrD,EAA0B7xB,UAAU4yB,mBAAqB,SAAUha,GACjE,IAAIlY,EAAKb,KAAK8nB,MACVJ,EAAS7mB,EAAG6mB,OACZC,EAAW9mB,EAAG8mB,SACd2N,EAAU,QAAUvc,EAAKwc,cAE7B,OAAIv1B,KAAK8nB,MAAMwN,GACNt1B,KAAK8nB,MAAMwN,GACR5N,QAAuB/hB,IAAbgiB,OAAf,EACE3nB,KAAKkP,cAAcW,SAASkJ,EAAM,IAI7CiZ,EAA0B7xB,UAAUq0B,eAAiB,SAAUtqB,GAC7D,IAAI5J,EAAQN,KAERa,EAAKb,KAAK8nB,MACV2E,EAAO5rB,EAAG4rB,KACV4H,EAAexzB,EAAGwzB,aAClBC,EAAczzB,EAAGyzB,YACjBkB,EAAiB30B,EAAG20B,eACpBC,EAAqB5X,IAAS,SAAU9E,GAC1C,GAAK6b,GAAW7b,EAAM0T,EAAMnsB,EAAM4xB,kBAAlC,CAIA,IAAIhqB,EAAa5H,EAAM6xB,YAAc7xB,EAAM6xB,YAAYpZ,GAAQ,GAQ3D2c,EAAkBpB,EAAc,IAAM,IACtCqB,EAAgBrB,EAAc,GAAK,IAEnCsB,EAAU,YAAS,YAAS,CAC9B1vB,KAAM,UACNgE,SAAUmqB,EAAenqB,EAAS6O,GAAQ,EAC1C2c,gBAAiBA,EACjBC,cAAeA,EACfE,aAAc,IACdxvB,UAAW,EACXC,UAAW,IACVkvB,GAAiBttB,GAKpB,OAAO5H,EAAMyyB,mBAAmBha,GAAQzY,EAAMw1B,wBAAwB/c,EAAM6c,GAAWt1B,EAAM4O,cAAc0U,yBAAyB7K,EAAM6c,OAG5I,OAAOnyB,QAAQoO,IAAI4jB,GAAoB7xB,MAAK,WAC1C,IAAI/C,EAAIE,EAE0C,QAAjDA,GAAMF,EAAKP,EAAMwnB,OAAOiO,2BAAwC,IAAPh1B,GAAyBA,EAAGQ,KAAKV,OAI/FmxB,EAA0B7xB,UAAUuyB,WAAa,WAC/C,IAAIpyB,EAAQN,KAEZ6d,IAAS,SAAU9E,GACjB,IAAI+Z,EAAYxyB,EAAMyyB,mBAAmBha,GAEzC+Z,EAAYA,EAAUtvB,OAASlD,EAAM4O,cAAcuU,0BAIvDuO,EAA0B7xB,UAAU21B,wBAA0B,SAAU/c,EAAM7Q,GAC5E,IAAI4qB,EAAY9yB,KAAK+yB,mBAAmBha,GACxC,GAAK+Z,EAAL,CACA,IAAIkD,EAAelD,EAAU7vB,MAI7B,OAHA6vB,EAAUpwB,IAAIszB,GACdlD,EAAUpwB,IAAIszB,GAEPzsB,EAAewP,EAAM+Z,EAAW,EAAG5qB,KAG5C8pB,EAA0B7xB,UAAUgc,WAAa,WAC/C,IAAI7b,EAAQN,KAERa,EAAKb,KAAK8nB,MACV2E,EAAO5rB,EAAG4rB,KACViH,EAAkB7yB,EAAG6yB,gBACzB,GAAK9zB,EAAY8zB,IAAqB1zB,KAAK+zB,eAA3C,CAEA/zB,KAAK0yB,aAEL,IAAIuD,EAAc,CAChBlvB,EAAG,EACHC,EAAG,GAEL6W,IAAS,SAAU9E,GACjBkd,EAAYld,GAAQwE,GAAWjd,EAAM4O,cAAc0L,UAAU7B,GAAOzY,EAAMyzB,eAAehb,OAQ3F/Y,KAAK4yB,qBACL5yB,KAAK6yB,yBACLhV,IAAS,SAAU9E,GACjB,GAAK6b,GAAW7b,EAAM0T,EAAM,MAA5B,CAGA,IAAI5rB,EAjiBV,SAAkCkY,EAAMoZ,EAAatO,GACnD,IAAImR,EAAajc,EAAKlF,IAAMkF,EAAKrC,IAC7BA,EAAM,YAAIyb,EAAYzb,IAAKyb,EAAYte,IAAMmhB,EAAYnR,GAC7D,MAAO,CACLnN,IAAKA,EACL7C,IAAK6C,EAAMse,GA4hBAkB,CAAyB51B,EAAM4O,cAAc0L,UAAU7B,GAAOzY,EAAMyzB,eAAehb,GAAOkd,EAAYld,IAC3GrC,EAAM7V,EAAG6V,IACT7C,EAAMhT,EAAGgT,IAEbvT,EAAM4O,cAAckU,cAAcrK,EAAMrC,EAAK7C,SAIjDme,EAA0B7xB,UAAUuU,MAAQ,SAAUxF,GACpD,IAAI5O,EAAQN,KAORm2B,EAAsB/G,GALZlgB,EAAc0G,cAKuB,eAAe,SAAUqX,GAC1E,IAAIpsB,EAAKP,EAAMwnB,MACX2E,EAAO5rB,EAAG4rB,KACV1rB,EAAKF,EAAGu1B,aAEZ3J,SAD0B,IAAP1rB,GAAuBA,IAClBT,EAAMgD,MAAM2pB,MAOlCoJ,EAAqBzJ,GAAYnU,OAAQ,UAAU,WACrDnY,EAAM6b,gBAOJma,EAA2BpnB,EAAcuT,gBAAe,WACtDniB,EAAM2xB,YAAY3xB,EAAMuyB,4BAO1B0D,EAAernB,EAAcqnB,aAQjC,OAPCA,aAAmD,EAASA,EAAatE,aAAejyB,KAAKsD,MAAMuuB,GAAkB,CACpHQ,eAAgBkE,EAAalE,iBAMxB,WACL8D,SAA0EA,IAC1EE,SAAwEA,IACxEC,SAAoFA,IAEpFh2B,EAAM8zB,eAIHpC,EA1jBT,GA6jBA,SAAS4C,GAAWzB,EAAW1G,EAAMyF,GACnC,SAAiB,IAATzF,GAAiBA,IAAS0G,GAAoC,OAArBjB,GAA6BA,IAAqBiB,GAuDrG,IAAIqD,GAA0B,SAAiCC,GAC7D,OAAO,SAAU3O,GAEf,OADA2O,EAAK3O,GACE,OAIPhB,GAAY0P,IAAwB,SAAU31B,GAChD,IAAIqO,EAAgBrO,EAAGqO,cAGvB,OAjCF,SAAiB4Y,EAAO5Y,GACtB,IAAIwnB,EAAoB5O,EAAM6O,aAC1B5Y,EAAqB,qBAAWqK,IAAqBrK,mBACrD4Y,EAAejS,IAAY,WAC7B,OAAO,IAAIsN,GAA0B,CACnC9iB,cAAeA,OAGnBynB,EAAazB,YAAY,YAAS,YAAS,GAAIpN,GAAQ,CACrD/J,mBAAoBA,KAItB,qBAAU,WACR,OAAO2Y,GAAqBA,EAAkBphB,UAAUqhB,KACvD,CAACA,IAEJ,qBAAU,WACR,OAAOA,EAAajiB,MAAMxF,KACzB,IAcI0nB,CAFK,YAAO/1B,EAAI,CAAC,kBAEFqO,MAMpB2nB,GAAO,CACThxB,IAAK,OACL8lB,aAAc,SAAsB7D,GAClC,QAASA,EAAM2E,QAAU3E,EAAM6O,cAEjC/K,aAAc,WACZ,OAAO9E,KAIX,SAASgQ,GAAiBnhB,GACxB,OAAO,qBAAU,WACf,OAAO,WACL,OAAOA,OAER,IA2DL,IAUIohB,GAAU,CAAC,aAAc,WAAY,aAErCC,GAAqB,SAA4BC,GACnD,OAAOF,GAAQ3f,QAAQ6f,GAAW,GAGhCC,GAAqBF,GAAmB,YAoE5C,IAAIG,GAAgBH,GAAmB,cAEnCI,GAAc,SAAqBjJ,GACrC,OAAO,SAAUlB,EAAO4C,GAClB7C,GAAaC,IAAQkB,EAASlB,EAAO4C,KAsC7C,SAASwH,GAAYvP,EAAO5Y,GAzK5B,IAAuBrO,EAAIhB,EACrBy3B,EACAC,EACAC,EACAC,EACAC,EACAnF,EACAxU,EACAyR,EARqB3vB,EA0KJqP,EAzKjBooB,GADiBz2B,EA0KPinB,GAzKCwP,MACXC,EAAa12B,EAAG02B,WAChBC,EAAW32B,EAAG22B,SACdC,EAAoB52B,EAAG42B,kBACvBC,EAAeJ,GAASC,GAAcC,GAAYC,EAClDlF,EAAa,iBAAO,MACpBxU,EAAqB,qBAAWqK,IAAqBrK,mBACrDyR,EAAW,CACbmB,eAAgB8G,EAChBvH,QAASqH,EACTpH,OAAQmH,EACR9G,MAAO,SAAevD,EAAO4C,GAC3B0C,EAAWnwB,QAAU,KACrBo1B,GAAYA,EAASvK,EAAO4C,KAGhC,qBAAU,WACmB,OAAvB0C,EAAWnwB,SACbmwB,EAAWnwB,QAAQyuB,eAAerB,MAUtCH,GAAgBxvB,EAAK,cAAe63B,GANpC,SAAuBzK,GACrBsF,EAAWnwB,QAAU,IAAImtB,GAAWtC,EAAOuC,EAAU,CACnDzR,mBAAoBA,MAKxB+Y,IAAiB,WACf,OAAOvE,EAAWnwB,SAAWmwB,EAAWnwB,QAAQmuB,SAkCpD,SAAuB1vB,EAAIqO,GACzB,IAAIyoB,EAAQ92B,EAAG82B,MACXC,EAAa/2B,EAAG+2B,WAChBC,EAAch3B,EAAGg3B,YACjB9M,EAAWlqB,EAAGkqB,SACd+M,EAAkBH,GAASC,GAAcC,GAAe9M,EACxDgN,EAAY,kBAAO,GACnBC,EAA6B,iBAAO,MAExC,SAASC,IACP,IAAIp3B,EAE0C,QAA7CA,EAAKm3B,EAA2B51B,eAA4B,IAAPvB,GAAyBA,EAAGU,KAAKy2B,GACvFA,EAA2B51B,QAAU,KAGvC2oB,GAAY5X,EAAYjE,EAAe6b,EAAUmM,IAGjD,IAAIgB,EAAc,iBAAO,MAEzBA,EAAY91B,QAAU,SAAU6qB,EAAO4C,GACrC,IAAIpb,EAAUvF,EAAc0G,cAE5B,GADAqiB,IACKF,EAAU31B,SAAYqS,EAA3B,CACAsjB,EAAU31B,SAAU,EACpB2oB,GAAYvX,EAActE,EAAegoB,IAGzC,IAAIiB,EAAkB3L,IAAc,GAC/B2L,IACLA,KArDgB,SAASC,EAAcpkB,EAAQtD,GACjD,QAAKA,IAEMsD,IAAWtD,GAGb0nB,EAAcpkB,EAAQtD,EAAM2nB,gBAiD9BD,CAAc3jB,EAASwY,EAAMzjB,QAChCquB,SAA0DA,EAAY5K,EAAO4C,GAE7E8H,SAA8CA,EAAM1K,EAAO4C,MAsB/DR,GAAgBngB,EAAe,cAAe4oB,EAlB9C,SAAuB7K,EAAO4C,GAC5BoI,IACAD,EAA2B51B,QAAU,YAAKgtB,GAAgB3W,OAAQ,aAAa,SAAUwU,EAAO4C,GAC9F,IAAIhvB,EAEJ,OAAsC,QAA9BA,EAAKq3B,EAAY91B,eAA4B,IAAPvB,OAAgB,EAASA,EAAGU,KAAK22B,EAAajL,EAAO4C,MACjGT,GAAgB3W,OAAQ,iBAAiB,SAAUwU,EAAO4C,GAC5D,IAAIhvB,EAEJ,OAAsC,QAA9BA,EAAKq3B,EAAY91B,eAA4B,IAAPvB,OAAgB,EAASA,EAAGU,KAAK22B,EAAajL,EAAO4C,OAEvF3gB,EAAc0G,gBACZmiB,EAAU31B,UAC1B21B,EAAU31B,SAAU,EACpBw1B,SAAwDA,EAAW3K,EAAO4C,GAC1E9E,GAAYzX,EAAcpE,EAAegoB,WAGqCvxB,GAChFmxB,GAAiBmB,GA+CjBK,CAAcxQ,EAAO5Y,GA7BvB,SAAyBrO,EAAIqO,GAC3B,IAAI8b,EAAanqB,EAAGmqB,WAChBuN,EAAe13B,EAAG03B,aAClBC,EAAa33B,EAAG23B,WAEhBxN,GACF7X,EAAYjE,EAAe8b,EAAYmM,IAGzC9H,GAAgBngB,EAAe,eAAgBkoB,IAAY,SAAUnK,EAAO4C,GAC1E0I,SAA4DA,EAAatL,EAAO4C,GAChF7E,GAAc1X,EAAcpE,EAAeioB,QAE7C9H,GAAgBngB,EAAe,eAAgBkoB,IAAY,SAAUnK,EAAO4C,GAC1E2I,SAAwDA,EAAWvL,EAAO4C,GAC1E7E,GAAcxX,EAActE,EAAeioB,QAe7CsB,CAAgB3Q,EAAO5Y,GAGzB,IAAIwpB,GAAe,CAAC,QAAS,aAAc,WAAY,oBAAqB,QAAS,aAAc,cAAe,WAAY,aAAc,eAAgB,cACxJC,GAAmBnC,IAAwB,SAAU31B,GACvD,IAAIqO,EAAgBrO,EAAGqO,cAGvBmoB,GAFY,YAAOx2B,EAAI,CAAC,kBAELqO,MAMjB0pB,GAAW,CACb/yB,IAAK,WACL8lB,aAAc,SAAsB7D,GAClC,OAAO4Q,GAAalY,MAAK,SAAU3a,GACjC,OAAOiiB,EAAMhoB,eAAe+F,OAGhC+lB,aAAc,WACZ,OAAO+M,KASPE,GAEJ,WACE,SAASA,IAMP74B,KAAK84B,YAAa,EAOlB94B,KAAK+4B,kBAAoB,GAOzB/4B,KAAKg5B,YAAc,IAAI94B,IAwIzB,OA5HA24B,EAAkB14B,UAAUmV,UAAY,SAAUpG,GAChD,IAAI5O,EAAQN,KAGZ,OADAA,KAAKg5B,YAAY54B,IAAI8O,GACd,WACL,OAAO5O,EAAM04B,YAAYz4B,OAAO2O,KAwBpC2pB,EAAkB14B,UAAUmD,MAAQ,SAAU6B,EAAY0N,GACxD,IAAIvS,EAAQN,KAEZ,GAAIA,KAAK84B,WAAY,CACnB,IAAIG,EAAe,GAOnB,OANAj5B,KAAKg5B,YAAYzoB,SAAQ,SAAUrB,GACjC,IAAI3L,EAAY+N,EAA4BpC,EAAe/J,EAAY,CACrE0N,mBAAoBA,IAEtBomB,EAAaxmB,KAAKlP,MAEbE,QAAQoO,IAAIonB,GAEnB,OAAO,IAAIx1B,SAAQ,SAAUC,GAC3BpD,EAAMy4B,kBAAkBtmB,KAAK,CAC3BlP,UAAW,CAAC4B,EAAY0N,GACxBnP,QAASA,QA2BjBm1B,EAAkB14B,UAAUuC,IAAM,SAAUyC,GAE1C,OADA,YAAUnF,KAAK84B,WAAY,iHACpB94B,KAAKg5B,YAAYzoB,SAAQ,SAAUrB,GACxCyB,EAAUzB,EAAe/J,OAc7B0zB,EAAkB14B,UAAUqD,KAAO,WACjCxD,KAAKg5B,YAAYzoB,SAAQ,SAAUrB,IAxtJvC,SAAuBA,GACrBA,EAAcM,cAAa,SAAUrO,GACnC,OAAOA,EAAMqC,UAutJXG,CAAcuL,OAUlB2pB,EAAkB14B,UAAUuU,MAAQ,WAClC,IAAIpU,EAAQN,KAEZA,KAAK84B,YAAa,EAClB94B,KAAK+4B,kBAAkBxoB,SAAQ,SAAU1P,GACvC,IAAI0C,EAAY1C,EAAG0C,UACfG,EAAU7C,EAAG6C,QAEjBpD,EAAMgD,MAAMwQ,MAAMxT,EAAO,YAASiD,IAAYK,KAAKF,OAUvDm1B,EAAkB14B,UAAUwU,QAAU,WACpC3U,KAAK84B,YAAa,EAClB94B,KAAKwD,QAGAq1B,EA7JT,GAwKIK,GAAgB1C,IAAwB,SAAU1O,GACpD,IAAIW,EAAUX,EAAMW,QAChB0Q,EAAOrR,EAAMqR,KACbjqB,EAAgB4Y,EAAM5Y,cAEtBrO,EAAK,YAAO4oB,KAAe,GAC3BR,EAAYpoB,EAAG,GACf6oB,EAAiB7oB,EAAG,GAEpBsqB,EAAkB,qBAAWpE,IAC7BqS,EAAyB,kBAAO,GAChChqB,OAAwGzJ,KAA9FwlB,aAAyD,EAASA,EAAgB/b,QAAwB+b,EAAgB/b,OAAS0Y,EAAM1Y,OACvJ,qBAAU,WACH6Z,GAQMmQ,EAAuBh3B,UAAWqmB,GAA8B,kBAAZA,GAA2BA,aAAmBoQ,IAC3GvnB,EAA4BpC,EAAeuZ,KARtC2Q,EAAuBh3B,SAAW+2B,GACrC7nB,EAA4BpC,EAAeiqB,EAAM,CAC/C/pB,OAAQA,IACPxL,KAAK8lB,GAGV0P,EAAuBh3B,SAAU,GAK/B6mB,IACFmQ,EAAuBh3B,SAAU,KAElC,CAACqmB,EAASrZ,EAAQ+pB,EAAMlQ,EAAWS,EAAgB5B,OAMpDuR,GAAO,CACTxzB,IAAK,OACL8lB,aAAc,SAAsB7D,GAClC,QAASA,EAAMqR,OAAS3Q,GAA0BV,IAEpD8D,aAAc,WACZ,OAAOsN,KAoBX,SAASI,GAAwBz4B,EAAI04B,QACR,IAAvBA,IACFA,GAAqB,GAGN14B,EAAGqH,WAApB,IACIgI,EAAgBrP,EAAGqP,cACnB1G,EAAS,YAAO3I,EAAI,CAAC,aAAc,kBAEvC,OAAO04B,EAAqB,YAAS,YAAS,GAAI/vB,GAAS0G,GAAiB1G,EAkE9E,IAYIgwB,GAAuB,SAA8BrqB,GACvD,IAbyCwC,EAarC8nB,EAAoBtqB,aAAmB1N,EAAc0N,EAAQlM,MAAQkM,EACzE,OAAO/J,MAAMyD,KAAK,IAAI3I,KAdmByR,EAcD8nB,GATpCr0B,MAAMC,QAAQsM,GACTA,EAGF,CAACA,GAPC,MAoFX,IAAInI,GAAS,CACXmiB,aAAc,SAAsB7D,GAClC,YAAyBniB,IAAlBmiB,EAAMW,UAA0BzZ,EAAe8Y,EAAMW,WAAa2B,GAAoBtC,EAAMW,UAErG3B,UAAW0P,IAAwB,SAAU31B,GAC3C,IAAI4nB,EAAU5nB,EAAG4nB,QAGjB,OAvIJ,SAAwBvZ,EAAe4D,EAAqB4mB,GAC1D,IAAIxP,EAAkB,kBAAO,GACzByP,EAAa,iBAAO,MAEnBA,EAAWv3B,UACdu3B,EAAWv3B,QAAUk3B,GAAwBxmB,GAAqB,IAGpE,qBAAU,WACR,IA/CiC3Q,EAAMlB,EA+CnC24B,EAAkB,GAElBC,EAAkBP,GAAwBxmB,GAE1CgnB,EAAcR,GAAwBxmB,GAAqB,GAE/D,IAAK,IAAIjN,KAAOg0B,EAAiB,CAG/B,IAAIE,EAAuB7P,EAAgB9nB,WAAa8M,EAAcU,SAAS/J,IAAQqJ,EAAcW,SAAShK,GAAK5C,QAAU62B,EAAYj0B,IAGrIm0B,EAAoC,OAArBF,EAAYj0B,GAC3Bo0B,GA5D2B93B,EA4DEw3B,EAAWv3B,QAAQyD,QA3DxCF,KADyB1E,EA4DqB64B,EAAYj0B,MA3D5CT,MAAMC,QAAQlD,IAASiD,MAAMC,QAAQpE,IAbrE,SAAwBA,EAAMkB,GAC5B,GAAa,OAATA,EAAe,OAAO,EAC1B,IAAI+3B,EAAa/3B,EAAKmD,OACtB,GAAI40B,IAAej5B,EAAKqE,OAAQ,OAAO,EAEvC,IAAK,IAAI0L,EAAI,EAAGA,EAAIkpB,EAAYlpB,IAC9B,GAAI7O,EAAK6O,KAAO/P,EAAK+P,GAAI,OAAO,EAGlC,OAAO,EAIqEmpB,CAAel5B,EAAMkB,GAAQA,IAASlB,IA6D1G+4B,IAAiBC,GAAmBF,KACtCH,EAAgB/zB,GAAOg0B,EAAgBh0B,IAI3CqkB,EAAgB9nB,SAAU,EAC1Bu3B,EAAWv3B,QAAU,YAAS,YAAS,GAAIu3B,EAAWv3B,SAAU03B,GAE5D1wB,OAAOC,KAAKuwB,GAAiBt0B,QAC/BgM,EAA4BpC,EAAe,YAAS,YAAS,GAAI0qB,GAAkB,CACjF1xB,WAAY4K,EAAoB5K,YAAcwxB,EAC9CxpB,cAAe4C,EAAoB5C,mBAGtC,CAAC4C,IAiGKsnB,CAFav5B,EAAGqO,cAEcuZ,EADpB5nB,EAAGqH,gBAIpBiH,GAAU,CACZwc,aAAc,SAAsB7D,GAClC,OAAOA,EAAM9S,WAAaoV,GAAoBtC,EAAMW,UAAYzZ,EAAe8Y,EAAMW,UAEvF3B,UAAW0P,IAAwB,SAAU31B,GAC3C,IAAI4nB,EAAU5nB,EAAG4nB,QACb1nB,EAAKF,EAAG6nB,QACRA,OAAiB,IAAP3nB,GAAuBA,EAGrC,OAjEJ,SAA8BmO,EAAe4b,EAASrC,EAASC,GAC7D,IAAI7nB,EAEAw5B,EAAiBb,GAAqB/Q,GACtCY,EAAUnC,KACVoT,EAAiD,QAAzBz5B,EAAKwoB,EAAQrV,cAA2B,IAAPnT,OAAgB,EAASA,EAAGyT,UACrFwkB,EAAa,kBAAO,GACxB,qBAAU,WACR,IAvB+CyB,EAAYC,EAuBvDC,GAAgB,EAEhB/R,GAIF+R,IAAkBH,EAClBD,EAAiBb,GAAqBnQ,EAAQZ,UAE9CgS,EAAgB3B,EAAW12B,UAhCkBm4B,EAgCWf,GAAqB1O,GAhCpB0P,EAgC8BH,EA/BpFE,EAAWG,KAAK,OAASF,EAAWE,KAAK,MAkC9CD,GAAiBnpB,EAA4BpC,EAAemrB,GAC5DvB,EAAW12B,SAAU,IAvChB,CAwCai4B,EAxCPK,KAAK,OAmFTC,CAFa95B,EAAGqO,cACTrO,EAAGiqB,QACmCrC,EAASC,OAG7D/e,GAAW,CACbgiB,aAAc,SAAsB7D,GAClC,OAAOsC,GAAoBtC,EAAMW,UAEnC3B,UAAW0P,IAAwB,SAAU31B,GAC3C,IAAI4nB,EAAU5nB,EAAG4nB,QAEjB,OAxCJ,SAAuCvZ,EAAe3L,GACpD,IAAIq3B,EAAc,mBAAQ,WACxB,OAAOr3B,EAAU+R,UAAUpG,KAC1B,CAAC3L,IACJuzB,IAAiB,WACf,OAAO8D,aAAiD,EAASA,OAmC1DC,CADah6B,EAAGqO,cAC6BuZ,OAkBpDqS,GAAY,CACdj1B,IAAK,YACL8lB,aAAc,WACZ,OAAO,GAETC,aAnB0B,SAA+B9D,GACzD,OAAIte,GAAOmiB,aAAa7D,GACfte,GAAOsd,UACL3X,GAAQwc,aAAa7D,GACvB3Y,GAAQ2X,UACNnd,GAASgiB,aAAa7D,GACxBne,GAASmd,eADX,IAsBT,IAEIiU,GAEJ,SAAUja,GAGR,SAASia,IACP,IAAIz6B,EAAmB,OAAXwgB,GAAmBA,EAAOhN,MAAM9T,KAAM+gB,YAAc/gB,KA0FhE,OAxFAM,EAAM06B,YAAc,CAClBj0B,EAAG,CACD2P,IAAK,EACL7C,IAAK,GAEP7M,EAAG,CACD0P,IAAK,EACL7C,IAAK,IAGTvT,EAAM26B,kBAAoB,CACxBl0B,OAAGpB,EACHqB,OAAGrB,GAGLrF,EAAMmoB,QAAU,SAAUjf,EAAQM,EAAQjJ,QAC7B,IAAPA,IACFA,EAAK,IAGP,IAAIkjB,EAAYljB,EAAGkjB,UACfnJ,EAAY/Z,EAAG+Z,UACfsgB,EAAmBr6B,EAAGq6B,iBACtBC,EAAqBt6B,EAAGs6B,mBACxB9mB,EAAS,YAAOxT,EAAI,CAAC,YAAa,YAAa,mBAAoB,uBAEnEE,EAAKT,EAAMwnB,MACX5Y,EAAgBnO,EAAGmO,cACnBwY,EAAS3mB,EAAG2mB,OAKhB,IAA2B,IAAvByT,EAA8B,OAAO76B,EAAM86B,eAQ/C,IAAIC,EAAcC,GAFlBxxB,EAASia,GAAaja,EACtBN,EAASoR,GAAapR,GAElBkI,EAAamM,IAAS,SAAU9E,GAKlC,GAAe,aAAX2O,EAAuB,CACzB,IAAIhK,EAAelU,EAAOuP,GAAMlF,IAAMrK,EAAOuP,GAAMrC,IACnD5M,EAAOiP,GAAMlF,IAAM/J,EAAOiP,GAAMrC,IAAMgH,EAGxC,IAAIxO,EAAcwS,kBAEX,YAAyB/b,IAArBu1B,EAGAG,EAGF/6B,EAAMi7B,YAAYxiB,EAAMvP,EAAOuP,GAAOjP,EAAOiP,GAAO1E,GAIpDnF,EAAckU,cAAcrK,EAAMvP,EAAOuP,GAAMrC,IAAKlN,EAAOuP,GAAMlF,UARxEqnB,IAAqBhT,GAAiBsT,KAAOtsB,EAAcoT,OAASpT,EAAcsT,WAmBtF,OAPAtT,EAAchN,SAOPuB,QAAQoO,IAAIH,GAAY9N,MAAK,WAClC,IAAI/C,EAAIE,EAEgD,QAAvDA,GAAMF,EAAKP,EAAMwnB,OAAO2T,iCAA8C,IAAP16B,GAAyBA,EAAGQ,KAAKV,GAE7FqO,EAAc+Z,UAChB/Z,EAAcga,SAAWjB,GAASkB,QAElC7oB,EAAM86B,mBAKL96B,EAoHT,OAjNA,YAAUy6B,EAASja,GAgGnBia,EAAQ56B,UAAUu7B,kBAAoB,WACpC,IAAIp7B,EAAQN,KAERkP,EAAgBlP,KAAK8nB,MAAM5Y,cAC/BA,EAAc4U,mBAAqBva,EACnC2F,EAAcmT,yBACdriB,KAAK27B,iBAAmBzsB,EAAcuT,eAAeziB,KAAKyoB,SAC1DvZ,EAAc2G,aAAa,YAAS,YAAS,GAAI3G,EAAcmF,QAAS,CACtE+mB,aAAc,WACZ,OAAO96B,EAAM86B,oBAKnBL,EAAQ56B,UAAUy7B,qBAAuB,WACvC,IAAIt7B,EAAQN,KAEZA,KAAK27B,mBACL9d,IAAS,SAAU9E,GACjB,IAAIlY,EAAIE,EAER,OAAuD,QAA/CA,GAAMF,EAAKP,EAAM26B,mBAAmBliB,UAA0B,IAAPhY,OAAgB,EAASA,EAAGQ,KAAKV,OAUpGk6B,EAAQ56B,UAAUo7B,YAAc,SAAUxiB,EAAMvP,EAAQM,EAAQjJ,GAC9D,IAAIE,EAAIC,EAEJqJ,OAAY,IAAPxJ,EAAgB,GAAKA,EAC1BqH,EAAamC,EAAGnC,WAChB2zB,EAAmBxxB,EAAGwxB,iBAEqB,QAA9C76B,GAAMD,EAAKf,KAAKi7B,mBAAmBliB,UAA0B,IAAP/X,GAAyBA,EAAGO,KAAKR,GACxF,IAgBI+6B,EAhBA5sB,EAAgBlP,KAAK8nB,MAAM5Y,cAC3B8rB,EAAch7B,KAAKg7B,YAAYjiB,GAC/BgjB,EAAiB7sB,EAAcyS,aAAa5I,GAMhDgjB,EAAeh5B,iBACfg5B,EAAer5B,IAAI,GACnBq5B,EAAer5B,IAAI,GAQfm5B,IACFC,EAAY97B,KAAKg8B,yBAAyBH,GAC1C3sB,EAAcsT,QAQhB,IAAIyZ,EAAQ,WAEV,IAAI5T,EAAI0T,EAAe94B,MA1KR,KALrB,SAAmBuG,EAAQrH,EAAMlB,EAAMonB,GACrC7e,EAAOkN,IAAM,YAAIvU,EAAKuU,IAAKzV,EAAKyV,IAAK2R,GACrC7e,EAAOqK,IAAM,YAAI1R,EAAK0R,IAAK5S,EAAK4S,IAAKwU,GA+KjC6T,CAAUlB,EAAalxB,EAAQN,EAAQ6e,GACvCnZ,EAAckU,cAAcrK,EAAMiiB,EAAYtkB,IAAKskB,EAAYnnB,KAE/DioB,SAAsDA,EAAUzT,IAIlE4T,IAEA/sB,EAAcgH,oBAEd,IAAIimB,EAAsBJ,EAAel5B,SAASo5B,GAE9C14B,EAAYgG,EAAwB,MAATwP,EAAe,UAAY,UAAWgjB,EAzLpD,IAyLoF7zB,GAAclI,KAAK8nB,MAAM5f,YAAcwxB,IAAmB91B,KAAKu4B,GAOpK,OALAn8B,KAAKi7B,kBAAkBliB,GAAQ,WAC7BgjB,EAAev4B,OACf24B,KAGK54B,GAGTw3B,EAAQ56B,UAAU67B,yBAA2B,SAAUH,GACrD,IACIp0B,EADgBzH,KAAK8nB,MAAM5Y,cACHW,SAAS,UAAW,GAChD,OAAO,SAAUwY,GACf5gB,EAAQ/E,IAAI05B,GAAgB,YAAI,EAAG,EAAG/T,KACtCwT,EAAiBn5B,IAAI25B,GAAiB,YAAI,EAAG,EAAGhU,OAIpD0S,EAAQ56B,UAAUi7B,aAAe,WAC/B,IAAIv6B,EAAIE,EAEkC,QAAzCA,GAAMF,EAAKb,KAAK8nB,OAAOsT,oBAAiC,IAAPr6B,GAAyBA,EAAGQ,KAAKV,IAGrFk6B,EAAQ56B,UAAU+B,OAAS,WACzB,OAAO,MAGF64B,EAlNT,CAmNE,aAEF,SAASuB,GAA6BxU,GACpC,IACIsT,EADK,YAAO3R,KAAe,GACT,GAEtB,OAAO,wBAAcsR,GAAS,YAAS,GAAIjT,EAAO,CAChDsT,aAAcA,KAIlB,SAASE,GAAS76B,EAAGC,GACnB,OAAO67B,GAAa97B,EAAEsG,EAAGrG,EAAEqG,IAAMw1B,GAAa97B,EAAEuG,EAAGtG,EAAEsG,GAGvD,SAASu1B,GAAa97B,EAAGC,GACvB,OAAOD,EAAEiW,MAAQhW,EAAEgW,KAAOjW,EAAEoT,MAAQnT,EAAEmT,IAGxC,IAAI6lB,GAAoB,CACtB/yB,SAAU,IACVD,KAAM,CAAC,GAAK,EAAG,GAAK,IAGtB,SAAS81B,GAAS9lB,EAAK7C,EAAK4oB,GAC1B,OAAO,SAAUpU,GAEf,OAAIA,EAAI3R,EAAY,EAChB2R,EAAIxU,EAAY,EACb4oB,EAAO,YAAS/lB,EAAK7C,EAAKwU,KAIrC,IAAI+T,GAAkBI,GAAS,EAAG,GAAK,KACnCH,GAAmBG,GAAS,GAAK,IAAM,KAKvCE,GAAgB,CAClB72B,IAAK,iBACL8lB,aAAc,SAAsB7D,GAClC,QAASA,EAAMJ,UAAYI,EAAMH,UAEnCiE,aAAc,WACZ,OAAO0Q,KAOPK,GAEJ,SAAU7b,GAGR,SAAS6b,IACP,OAAkB,OAAX7b,GAAmBA,EAAOhN,MAAM9T,KAAM+gB,YAAc/gB,KAqD7D,OAxDA,YAAU28B,EAAS7b,GAUnB6b,EAAQx8B,UAAUu7B,kBAAoB,WACpC,IAAI76B,EAAKb,KAAK8nB,MACViE,EAAalrB,EAAGkrB,WAChB7c,EAAgBrO,EAAGqO,cACvBka,GAAe2C,IAAeA,EAAWpC,SAASza,IAUpDytB,EAAQx8B,UAAUy8B,wBAA0B,WAC1C,IAAI/7B,EAAKb,KAAK8nB,MACViE,EAAalrB,EAAGkrB,WAChB7c,EAAgBrO,EAAGqO,cASvB,OAPIka,GAAe2C,GACjBA,EAAW8Q,cAEX3tB,EAAc8T,sBACd+I,EAAW3rB,IAAI8O,IAGV,MAGTytB,EAAQx8B,UAAU28B,mBAAqB,WACrC,IAAIj8B,EAAKb,KAAK8nB,MACViE,EAAalrB,EAAGkrB,WAChB7c,EAAgBrO,EAAGqO,cAClBka,GAAe2C,IAAaA,EAAWhD,QAM5C7Z,EAAc+T,mBAGhB0Z,EAAQx8B,UAAU+B,OAAS,WACzB,OAAO,MAGFy6B,EAzDT,CA0DE,IAAM7V,WAER,SAASiW,GAAuBjV,GAC9B,IAAIiE,EAAa,qBAAWxC,IAC5B,OAAO,IAAMyT,cAAcL,GAAS,YAAS,GAAI7U,EAAO,CACtDiE,WAAYA,KAIhB,IAAIkR,GAAgB,CAClBp3B,IAAK,iBACL8lB,aAAc,SAAsB7D,GAClC,QAASA,EAAM2E,QAAU3E,EAAMJ,UAAYI,EAAMH,UAEnDiE,aAAc,WACZ,OAAOmR,KAGPG,GAAoB,CAACD,GAAenC,GAAWjE,GAAM+B,GAAUS,GAAMqD,IACrES,GAAgB,CAClB5S,iBAj8FwB,SAA6BzD,EAAWgB,EAAOS,EAAU1oB,GACjF,IAAImU,EAASmT,KACTjY,EAAgBwV,IAAY,WAE9B,OAAO,IADgBmC,GAAeC,GAAaV,GAAmBvF,IAC1C7M,EAAQnU,MAEtCqP,EAAc2G,aAAa,YAAS,YAAS,YAAS,GAAI3G,EAAcmF,QAAS,CAC/EwG,4BAA6B0N,IAC3BT,IACJ5Y,EAAcyY,SAAWG,EAAMH,SAC/B,IAAIwD,EAAkB,qBAAWpE,IAK7BkC,EAAgC,OAApBkC,GAAkCA,EAAgBlC,UAClE/Z,EAAc+Z,eAAgCtjB,IAApBmiB,EAAMmB,UAA0BnB,EAAMmB,UAAYA,EAK5E,IAAImU,EAAajS,aAAyD,EAASA,EAAgBvB,GAWnG,OAVA1a,EAAcmuB,gBAAkBrpB,GAAUA,EAAOopB,aAAeA,EAKhE,qBAAU,WACR,GAAItV,EAAMnF,oBACR,OAAOzT,EAAcyT,oBAAoBmF,EAAMnF,uBAEhD,CAACmF,EAAMnF,sBACHzT,GAk6FPhN,OAn0FF,SAAgB4kB,EAAWgB,EAAO5Y,GAGhC,IAAIouB,EAAsC,iBAAdxW,EA1C9B,SAAqBgB,GACnB,IAAIyV,EAAW,GAEf,IAAK,IAAI13B,KAAOiiB,EACVR,GAAYzhB,KAAM03B,EAAS13B,GAAOiiB,EAAMjiB,IAG9C,OAAO03B,EAmC8CC,CAAY1V,GAASA,EAQ1E5Y,EAAc4S,QACd5S,EAAcoV,QAEd,IAAImZ,EAAc5W,GAAeC,GApBnC,SAAuB5X,GACrB,OAAO,YAAS,YAAS,GAAIA,EAAcgW,OAAQ,CACjD5K,MAAO,YAAS,GAAIpL,EAAc+R,cAkBUyc,CAAcxuB,GA3C9D,SAAwBA,EAAerO,GACrC,IAAI4rB,EAAO5rB,EAAG4rB,KAEVkR,EAAY,CACdrjB,MAAO,YAAS,YAAS,YAAS,GAAIpL,EAAc+R,YAAa/R,EAAcoL,OAAQpL,EAAcqL,OAYvG,OATMkS,IAEJkR,EAAUC,WAAY,EAEtBD,EAAUrjB,MAAMujB,WAAa,OAE7BF,EAAUrjB,MAAMwjB,aAAuB,IAATrR,EAAgB,OAAS,QAAmB,MAATA,EAAe,IAAM,MAGjFkR,EA2BsEI,CAAe7uB,EAAe4Y,GAC3G,OAAO,wBAAchB,EAAW,YAAS,YAAS,YAAS,GAAIwW,GAAiB,CAC9Ez9B,IAAKqP,EAAcrP,MACjB49B,MAm0FN,SAASO,GAAkB1T,GACzB,IAAIjW,EAAS,YAAS,YAAS,GAAI8oB,IAAgB,CACjD7S,gBAAiBA,IAOnB,IAAI2T,EAAiB,IAAI9pB,IAYzB,OAAO,IAAI+pB,MAAM,CACf9uB,OAjBF,SAAgB0X,GACd,OAAOuD,GAAsBvD,EAAWzS,KAiBvC,CACDpR,IAbF,SAAauG,EAAQ3D,GACnB,MAAY,WAARA,EAAyB2D,EAAO4F,QAE/B6uB,EAAehrB,IAAIpN,IACtBo4B,EAAev7B,IAAImD,EAAKwkB,GAAsBxkB,EAAKwO,IAG9C4pB,EAAeh7B,IAAI4C,OAiB9B,IAAIs4B,GAAsBH,GAAkBd,IA4C5C,IAAIE,GAAa,EAEjB,SAASgB,KACP,IAAIxU,EAAKwT,GAET,OADAA,KACOxT,EAGT,IAAIyU,GAAgB,SAAuBx9B,GACzC,IAAIoT,EAAWpT,EAAGoT,SACd6W,EAAUjqB,EAAGiqB,QACb7B,EAAYpoB,EAAGooB,UACfqV,EAAkBz9B,EAAG6oB,eACrBta,EAASvO,EAAGuO,OACZmvB,EAAwB19B,EAAG09B,sBAC3BC,EAAmB9Z,GAAY+Z,IAC/B7U,EAAKlF,GAAY0Z,IACjB/U,EAAU,mBAAQ,WACpB,MAAO,CACLO,GAAIA,EACJkB,QAASA,EACT7B,UAAWA,EACX7Z,OAAQA,EACRsa,eAAgB,SAAwBgV,GACtCF,EAAiB97B,IAAIg8B,GAAS,GAC9B,IAAIC,GAAc,EAClBH,EAAiBjuB,SAAQ,SAAUquB,GAC5BA,IAAYD,GAAc,MAEjCA,IAAgBL,SAAkEA,MAEpF3U,SAAU,SAAkB+U,GAE1B,OADAF,EAAiB97B,IAAIg8B,GAAS,GACvB,WACL,OAAOF,EAAiBj+B,OAAOm+B,QAUvCH,OAAwB54B,EAAY,CAACsjB,IAMrC,OALA,mBAAQ,WACNuV,EAAiBjuB,SAAQ,SAAU+F,EAAGzQ,GACpC,OAAO24B,EAAiB97B,IAAImD,GAAK,QAElC,CAACojB,IACG,wBAAclC,GAAgBmF,SAAU,CAC7C/qB,MAAOkoB,GACNpV,IAGL,SAASwqB,KACP,OAAO,IAAItqB,IAGb,SAAS0qB,GAAYnuB,GACnB,OAAOA,EAAM7K,KAAO,GA4FtB,IAAIi5B,GAAkB,SAAyBj+B,GAC7C,IAAIoT,EAAWpT,EAAGoT,SACd7E,EAASvO,EAAGuO,OACZrO,EAAKF,EAAGiqB,QACRA,OAAiB,IAAP/pB,GAAuBA,EACjC2oB,EAAiB7oB,EAAG6oB,eACpBqV,EAAkBl+B,EAAGk+B,gBACrB/9B,EAAKH,EAAG09B,sBACRA,OAA+B,IAAPv9B,GAAuBA,EAG/Cg+B,EAlLN,WACE,IAAIC,EAAe,kBAAO,GAEtBp+B,EAAK,YAAO,mBAAS,GAAI,GACzBq+B,EAAoBr+B,EAAG,GACvBs+B,EAAuBt+B,EAAG,GAK9B,OAHAi2B,IAAiB,WACf,OAAOmI,EAAa78B,SAAU,KAEzB,uBAAY,YAChB68B,EAAa78B,SAAW+8B,EAAqBD,EAAoB,KACjE,CAACA,IAsKcE,GACdC,EAAgB,qBAAW9V,IAE3BH,GAAeiW,KACjBL,EAAcK,EAAc/V,aAG9B,IAAIY,EAAkB,kBAAO,GAEzBoV,EA5FN,SAAsBrrB,GACpB,IAAIsrB,EAAW,GAKf,OAHA,WAAShvB,QAAQ0D,GAAU,SAAUvD,GAC/B,yBAAeA,IAAQ6uB,EAAS9sB,KAAK/B,MAEpC6uB,EAsFgBC,CAAavrB,GAGhCwrB,EAAkB,iBAAOH,GAEzBI,EAAc,iBAAO,IAAIvrB,KAAO/R,QAEhCu9B,EAAU,iBAAO,IAAIz/B,KAAOkC,QAIhC,GAxHF,SAA2B6R,EAAUyrB,GAEnCzrB,EAAS1D,SAAQ,SAAUG,GACzB,IAAI7K,EAAMg5B,GAAYnuB,GAUtBgvB,EAAYh9B,IAAImD,EAAK6K,MAwGvBkvB,CAAkBN,EAAkBI,GAGhCxV,EAAgB9nB,QAElB,OADA8nB,EAAgB9nB,SAAU,EACnB,wBAAc,WAAU,KAAMk9B,EAAiB/2B,KAAI,SAAUmI,GAClE,OAAO,wBAAc2tB,GAAe,CAClCx4B,IAAKg5B,GAAYnuB,GACjBuY,WAAW,EACX6B,UAASA,QAAUnlB,EACnB44B,sBAAuBA,GACtB7tB,OAcP,IATA,IAAImvB,EAAmB,YAASP,GAI5BQ,EAAcL,EAAgBr9B,QAAQmG,IAAIs2B,IAC1CkB,EAAaT,EAAiB/2B,IAAIs2B,IAElCmB,EAAaF,EAAYx6B,OAEpB0L,EAAI,EAAGA,EAAIgvB,EAAYhvB,IAAK,CACnC,IAAInL,EAAMi6B,EAAY9uB,IAEW,IAA7B+uB,EAAW3oB,QAAQvR,GACrB85B,EAAQv/B,IAAIyF,GAGZ85B,EAAQp/B,OAAOsF,GA2DnB,OArDIk5B,GAAmBY,EAAQ7+B,OAC7B++B,EAAmB,IAKrBF,EAAQpvB,SAAQ,SAAU1K,GAExB,IAAiC,IAA7Bk6B,EAAW3oB,QAAQvR,GAAvB,CACA,IAAI6K,EAAQgvB,EAAYz8B,IAAI4C,GAC5B,GAAK6K,EAAL,CACA,IAAIuvB,EAAiBH,EAAY1oB,QAAQvR,GAkBzCg6B,EAAiBK,OAAOD,EAAgB,EAAG,wBAAc5B,GAAe,CACtEx4B,IAAKg5B,GAAYnuB,GACjBuY,WAAW,EACXS,eAnBW,WACXgW,EAAYn/B,OAAOsF,GACnB85B,EAAQp/B,OAAOsF,GAEf,IAAIs6B,EAAcV,EAAgBr9B,QAAQg+B,WAAU,SAAUC,GAC5D,OAAOA,EAAax6B,MAAQA,KAE9B45B,EAAgBr9B,QAAQ89B,OAAOC,EAAa,GAEvCR,EAAQ7+B,OACX2+B,EAAgBr9B,QAAUk9B,EAC1BN,IACAtV,GAAkBA,MAQpBta,OAAQA,EACRmvB,sBAAuBA,GACtB7tB,SAILmvB,EAAmBA,EAAiBt3B,KAAI,SAAUmI,GAChD,IAAI7K,EAAM6K,EAAM7K,IAChB,OAAO85B,EAAQ1sB,IAAIpN,GAAO6K,EAAQ,wBAAc2tB,GAAe,CAC7Dx4B,IAAKg5B,GAAYnuB,GACjBuY,WAAW,EACXsV,sBAAuBA,GACtB7tB,MAEL+uB,EAAgBr9B,QAAUy9B,EAMnB,wBAAc,WAAU,KAAMF,EAAQ7+B,KAAO++B,EAAmBA,EAAiBt3B,KAAI,SAAUmI,GACpG,OAAO,uBAAaA,QAIxB,SAAS4vB,GAAsB5vB,EAAO6vB,GACpC,OAAIA,GAAS7vB,IAAU6vB,EAAMC,KACpB,CACLtF,iBAAkBhT,GAAiBsT,MAE5B+E,GAAS7vB,EAAMwY,WAAajB,GAASwY,UAAY/vB,IAAU6vB,EAAMC,MAAQD,EAAMC,OAASD,EAAMG,SAChG,CACLxF,iBAAkBhT,GAAiByY,OAOnCjwB,EAAMwY,WAAajB,GAASwY,SAC9B1c,EAAYwc,aAAqC,EAASA,EAAMK,kBACvDlwB,EAAMwY,WAAajB,GAAS4Y,UACrCjmB,EAAY2lB,aAAqC,EAASA,EAAMO,mBAG3D,CACL/c,UAAWA,EACXnJ,UAAWA,IAXb,IAAImJ,EACAnJ,EAcN,SAASohB,GAAyBtrB,EAAO6vB,GACvC,IAAI1/B,EAAIE,EAAIC,EAERqT,EAAS,GACT0sB,EAAYR,GAASA,EAAMC,KAC3BQ,EAAoBD,aAA6C,EAASA,EAAU7X,SAoBxF,OAlBIqX,GAAS7vB,IAAUqwB,EACjBrwB,EAAMwY,WAAajB,GAASwY,SAC9BpsB,EAAO0P,UAAYwc,EAAMK,kBAChBlwB,EAAMwY,WAAajB,GAAS4Y,UACrCxsB,EAAOuG,UAAY2lB,EAAMO,mBAElBP,GAAS7vB,IAAU6vB,EAAMU,SAClC5sB,EAAOnM,WAAaq4B,EAAMW,oBAEtBF,IAAsB/Y,GAASwY,SACjCpsB,EAAOuG,UAAY2lB,EAAMY,gBAChBH,IAAsB/Y,GAAS4Y,UACxCxsB,EAAO0P,UAAYwc,EAAMa,mBAM+C,QAArEvgC,EAAK0/B,aAAqC,EAASA,EAAMU,cAA2B,IAAPpgC,OAAgB,EAASA,EAAGw8B,kBAAqB0D,aAA6C,EAASA,EAAU1D,iBAIhMkD,GAAS7vB,IAAUqwB,EAIbR,GAAS7vB,IAAU6vB,EAAMU,OAC7BF,GAAaC,IAAsB/Y,GAASwY,UAAoBO,IAAsB/Y,GAAS4Y,UAClGxsB,EAAOwnB,iBAAuF,QAAnE76B,EAAKu/B,aAAqC,EAASA,EAAMC,YAAyB,IAAPx/B,OAAgB,EAASA,EAAG6O,SAAS,UAAW,IAGxJwE,EAAO6mB,iBAAmBhT,GAAiBsT,KARvC9qB,EAAMwY,WAAajB,GAASwY,WAC9BpsB,EAAOwnB,iBAAyF,QAArE96B,EAAKw/B,aAAqC,EAASA,EAAMU,cAA2B,IAAPlgC,OAAgB,EAASA,EAAG8O,SAAS,UAAW,IAUrJwE,GAfEA,EAkGX,IAAIgtB,GAEJ,WACE,SAASA,IACPrhC,KAAKgpB,MAAQ,GAEbhpB,KAAKshC,aAAc,EA2GrB,OAxGAD,EAAYlhC,UAAUC,IAAM,SAAUsQ,GACpC,IAAI7P,EAOJ,GALAb,KAAKgpB,MAAMvW,KAAK/B,GAKZ1Q,KAAKuhC,SAAU,CACjB7wB,EAAM6lB,aAAev2B,KAAKuhC,SAE1B7wB,EAAMmS,gBAAkB7iB,KAAKuhC,SAASC,YACtC,IAAIttB,EAASlU,KAAKuhC,SAASE,mBAE3B,IAAK,IAAI57B,KAAOqO,EACTxD,EAAMd,SAAS/J,GAGa,QAA9BhF,EAAK6P,EAAMb,SAAShK,UAAyB,IAAPhF,GAAyBA,EAAG6B,IAAIwR,EAAOrO,IAF9E6K,EAAMZ,SAASjK,EAAK7B,EAAYkQ,EAAOrO,KAO7C7F,KAAKshC,aAAc,GAGrBD,EAAYlhC,UAAU6rB,OAAS,SAAUtb,GACvC,IAAI0C,EAAQpT,KAAKgpB,MAAMoX,WAAU,SAAUsB,GACzC,OAAOhxB,IAAUgxB,MAEJ,IAAXtuB,GAAcpT,KAAKgpB,MAAMkX,OAAO9sB,EAAO,IAG7CiuB,EAAYlhC,UAAUwhC,oBAAsB,WAC1C3hC,KAAK0gC,SAAW1gC,KAAKwgC,KACrBxgC,KAAK4hC,WAAa5hC,KAAKihC,OAEvB,IAAIpgC,EAAK,YA5Gb,SAA2B0/B,EAAO1/B,GAYhC,IAXA,IAAIE,EAAK,YAAOF,EAAI,GAChB6/B,EAAW3/B,EAAG,GACd6gC,EAAa7gC,EAAG,GAEhBy/B,OAAO76B,EACPk8B,EAAY,EACZZ,OAASt7B,EAETm8B,EAAavB,EAAMj7B,OACnBy8B,GAAgB,EAEX/wB,EAAI8wB,EAAa,EAAG9wB,GAAK,EAAGA,IAAK,CACxC,IAAIN,EAAQ6vB,EAAMvvB,GAIlB,GAHoBA,IAAM8wB,EAAa,IACpBC,EAAgBrxB,EAAMuY,WAErC8Y,EACFvB,EAAO9vB,MACF,CAGL,IAAIvO,EAAOo+B,EAAMvvB,EAAI,GACjB7O,GAAQA,EAAK8mB,YAAWuX,EAAO9vB,GAGrC,GAAI8vB,EAAM,CACRqB,EAAY7wB,EACZ,OASJ,GALKwvB,IAAMA,EAAOD,EAAM,IAExBU,EAASV,EAAMsB,EAAY,GAGvBrB,EACF,IAASxvB,EAAI6wB,EAAY,EAAG7wB,GAAK,EAAGA,IAAK,CAGvC,IAFIN,EAAQ6vB,EAAMvvB,IAERiY,UAAW,CACnBgY,EAASvwB,EACT,OAgBN,OANI8vB,IAASE,IAAaqB,GAAiBd,IAAWW,GAAcrB,EAAM7xB,MAAK,SAAUgzB,GACvF,OAAOA,IAAehB,OAEtBF,EAAOE,GAGF,CAACF,EAAMS,GAiDIe,CAAkBhiC,KAAKgpB,MAAO,CAAChpB,KAAKwgC,KAAMxgC,KAAKihC,SAAU,GACrET,EAAO3/B,EAAG,GACVogC,EAASpgC,EAAG,GAEhBb,KAAKwgC,KAAOA,EACZxgC,KAAKihC,OAASA,GAGhBI,EAAYlhC,UAAU8hC,eAAiB,WACrC,GAAKjiC,KAAKwgC,KAAV,CACA,IAAIe,EAAW,CACbC,YAAaxhC,KAAKwgC,KAAK3d,gBACvB4e,mBAAoB,IAEtBzhC,KAAKwgC,KAAKhxB,cAAa,SAAUrO,EAAO0E,GACtC,IAAIqO,EAAS/S,EAAM8B,MAEdwU,GAAgBvD,KACnBqtB,EAASE,mBAAmB57B,GAAOqO,MAGvC,IAAIyiB,EAAe7E,GAAoB7uB,IAAIjD,KAAKwgC,MAE5C7J,GAAgBA,EAAa1E,aAC/BsP,EAAStP,YAAa,EACtBsP,EAASlP,eAAiBsE,EAAatE,gBAGzCryB,KAAKuhC,SAAWA,IAGlBF,EAAYlhC,UAAU+hC,cAAgB,WACpC,IAAIrhC,EAEJ,OAAOb,KAAKwgC,OAA8B,QAApB3/B,EAAKb,KAAKwgC,YAAyB,IAAP3/B,OAAgB,EAASA,EAAGqoB,YAAcjB,GAAS4Y,SAGvGQ,EAAYlhC,UAAUygC,gBAAkB,WACtC,IAAI//B,EAEJ,OAAOb,KAAKihC,OAASjhC,KAAKihC,OAAOpe,gBAA2C,QAAxBhiB,EAAKb,KAAKuhC,gBAA6B,IAAP1gC,OAAgB,EAASA,EAAG2gC,aAGlHH,EAAYlhC,UAAU2gC,gBAAkB,WACtC,IAAIjgC,EAEJ,OAA8B,QAAtBA,EAAKb,KAAKihC,cAA2B,IAAPpgC,OAAgB,EAASA,EAAG+V,KAGpEyqB,EAAYlhC,UAAUihC,cAAgB,WACpC,IAAIvgC,EAEJ,OAA4B,QAApBA,EAAKb,KAAKwgC,YAAyB,IAAP3/B,OAAgB,EAASA,EAAGgiB,iBAGlEwe,EAAYlhC,UAAUghC,cAAgB,WACpC,IAAItgC,EAEJ,OAA4B,QAApBA,EAAKb,KAAKwgC,YAAyB,IAAP3/B,OAAgB,EAASA,EAAG+V,KAGlEyqB,EAAYlhC,UAAU+gC,kBAAoB,WACxC,IAAIrgC,EAEJ,OAA4B,QAApBA,EAAKb,KAAKwgC,YAAyB,IAAP3/B,OAAgB,EAASA,EAAGwT,OAAOnM,YAGlEm5B,EA/GT,IAwHA,SAAUvgB,GAGR,SAASqhB,IACP,IAAI7hC,EAAmB,OAAXwgB,GAAmBA,EAAOhN,MAAM9T,KAAM+gB,YAAc/gB,KAqDhE,OA/CAM,EAAM2T,SAAW,IAAI/T,IAOrBI,EAAM8hC,OAAS,IAAIjuB,IAMnB7T,EAAMw4B,YAAa,EAMnBx4B,EAAM+hC,iBAAkB,EAKxB/hC,EAAMgiC,iBAAkB,EAKxBhiC,EAAMiiC,YAAc,YAAS,YAAS,GAAI1Z,MAAkB,CAC1DgU,WAAY,SAAoB3Z,GAC9B,OAAO5iB,EAAMkiC,eAAetf,IAE9BoG,YAAa,WAGXhpB,EAAMiiC,YAAc,YAAS,GAAIjiC,EAAMiiC,aAEvCjiC,EAAMkiC,gBAAe,IAEvB7Y,SAAU,SAAkBjZ,GAC1B,OAAOpQ,EAAMmiC,SAAS/xB,IAExBsb,OAAQ,SAAgBtb,GACtB,OAAOpQ,EAAMoiC,YAAYhyB,MAGtBpQ,EAxDT,YAAU6hC,EAAqBrhB,GA2D/BqhB,EAAoBhiC,UAAUu7B,kBAAoB,WAChD17B,KAAK84B,YAAa,EAClB94B,KAAK2iC,gBAGPR,EAAoBhiC,UAAU28B,mBAAqB,WACjD98B,KAAK4iC,wBAGPT,EAAoBhiC,UAAU0iC,sBAAwB,WAEpD,OADA7iC,KAAKsiC,iBAAkB,GAChB,GAGTH,EAAoBhiC,UAAUyiC,qBAAuB,WACnD,IAAItiC,EAAQN,KAMZA,KAAKsiC,gBAAkBtiC,KAAKqiC,iBAAkB,EAC9C,IAAIn8B,EAAOlG,KAAK8nB,MAAM5hB,KAMtBlG,KAAKiU,SAAS1D,SAAQ,SAAUG,GACzBA,EAAMuY,UAEAvY,EAAMwY,WAAajB,GAASwY,WACrC/vB,EAAMwY,SAAWxY,EAAMwY,WAAajB,GAAS4Y,QAAU5Y,GAASwY,SAAWxY,GAASkB,SAFpFzY,EAAMwY,SAAWjB,GAAS4Y,WAU9B7gC,KAAK2iC,eAKL,IAAIG,EAA2B,cAAT58B,EAAuB81B,GAA2BsE,GAKpEjgC,EAAU,CACZgjB,cAAe,SAAuB3S,GACpC,OAAOA,EAAM2S,iBAEfT,YAAa,SAAqBlS,GAChC,IAAIiX,EAAWjX,EAAMiX,SACrBjX,EAAMkS,YAAYkgB,EAAgBpyB,EAAOpQ,EAAMyiC,SAASpb,OAW5D3nB,KAAKiU,SAAS1D,SAAQ,SAAUG,GAC9B,OAAOpQ,EAAMiiC,YAAYniC,IAAIsQ,MAE/B1Q,KAAKuiC,YAAYxZ,MAAM1oB,GAKvBL,KAAKoiC,OAAO7xB,SAAQ,SAAUgwB,GAC5B,OAAOA,EAAMgB,cAAW57B,MAI5Bw8B,EAAoBhiC,UAAUwiC,aAAe,WAC3C3iC,KAAKoiC,OAAO7xB,SAAQ,SAAUgwB,GAC5B,OAAOA,EAAMoB,0BAIjBQ,EAAoBhiC,UAAUqiC,eAAiB,SAAUtf,QACzC,IAAVA,IACFA,GAAQ,IAGJA,GAAUljB,KAAKqiC,kBAKrBriC,KAAKqiC,iBAAkB,EAKvBriC,KAAKiU,SAAS1D,SAAQ,SAAUG,GAC9B,OAAOA,EAAMsS,yBAQfhjB,KAAKoiC,OAAO7xB,SAAQ,SAAUgwB,GAC5B,OAAOA,EAAM0B,qBAMX/e,GAAUljB,KAAKsiC,kBACjBtiC,KAAKsiC,iBAAkB,EACvBtiC,KAAKspB,iBAIT6Y,EAAoBhiC,UAAUsiC,SAAW,SAAU/xB,GACjD1Q,KAAKiU,SAAS7T,IAAIsQ,GAClB1Q,KAAKgjC,WAAWtyB,GAChBA,EAAMwY,SAAWlpB,KAAK84B,WAAa7Q,GAASwY,SAAWxY,GAASkB,SAGlEgZ,EAAoBhiC,UAAUuiC,YAAc,SAAUhyB,GACpD1Q,KAAKwiC,iBACLxiC,KAAKiU,SAAS1T,OAAOmQ,GACrB1Q,KAAKijC,gBAAgBvyB,IAGvByxB,EAAoBhiC,UAAU6iC,WAAa,SAAUtyB,GACnD,IAAI6vB,EAAQvgC,KAAK+iC,SAASryB,EAAMiX,UAChC4Y,SAA8CA,EAAMngC,IAAIsQ,IAG1DyxB,EAAoBhiC,UAAU8iC,gBAAkB,SAAUvyB,GACxD,IAAI6vB,EAAQvgC,KAAK+iC,SAASryB,EAAMiX,UAChC4Y,SAA8CA,EAAMvU,OAAOtb,IAQ7DyxB,EAAoBhiC,UAAU4iC,SAAW,SAAUnZ,GACjD,QAAWjkB,IAAPikB,EAGJ,OADC5pB,KAAKoiC,OAAOnvB,IAAI2W,IAAO5pB,KAAKoiC,OAAO1/B,IAAIknB,EAAI,IAAIyX,IACzCrhC,KAAKoiC,OAAOn/B,IAAI2mB,IAGzBuY,EAAoBhiC,UAAU+B,OAAS,WACrC,OAAO,wBAAcqnB,GAAoB2C,SAAU,CACjD/qB,MAAOnB,KAAKuiC,aACXviC,KAAK8nB,MAAM7T,WA5NlB,CAgOE,aAiUF,SAASivB,KACP,MAAO,CACLC,QAASn/B,EAAY,GACrBo/B,QAASp/B,EAAY,GACrBq/B,gBAAiBr/B,EAAY,GAC7Bs/B,gBAAiBt/B,EAAY,IA4GNk/B,KAmE3B,IAAIK,GAAuBv/B,EAAY,MAEvC,GAAsB,oBAAXyU,OACT,GAAIA,OAAO+qB,WAAY,CACrB,IAAIC,GAAqBhrB,OAAO+qB,WAAW,4BAEvCE,GAA8B,WAChC,OAAOH,GAAqB7gC,IAAI+gC,GAAmBE,UAGrDF,GAAmBG,YAAYF,IAC/BA,UAEAH,GAAqB7gC,KAAI,IA+P7B,WACE,SAASmhC,IACP7jC,KAAK8jC,kBAAoB,IAAI5jC,IAS/B2jC,EAAa1jC,UAAUmV,UAAY,SAAU3L,GAC3C,IAAIrJ,EAAQN,KAGZ,OADAA,KAAK8jC,kBAAkB1jC,IAAIuJ,GACpB,WACL,OAAOrJ,EAAMwjC,kBAAkBvjC,OAAOoJ,KAoB1Ck6B,EAAa1jC,UAAUmD,MAAQ,SAAU2pB,EAAO9kB,GAC9CnI,KAAK8jC,kBAAkBvzB,SAAQ,SAAU5G,GACvCA,EAASrG,MAAM2pB,EAAM8W,aAAe9W,EAAO9kB,OAI/C07B,EAAa1jC,UAAU6jC,kBAAoB,WACzChkC,KAAK8jC,kBAAkBvzB,SAAQ,SAAU5G,GACvCA,EAASipB,qBACTjpB,EAASkpB,6BA7Cf,IA8IA,SAAU/R,GAGR,SAASmjB,IACP,IAAI3jC,EAAmB,OAAXwgB,GAAmBA,EAAOhN,MAAM9T,KAAM+gB,YAAc/gB,KAGhE,OADAM,EAAM4jC,aAAe,GACd5jC,EANT,YAAU2jC,EAAoBnjB,GAS9BmjB,EAAmB9jC,UAAU+V,kBAAoB,aAEjD+tB,EAAmB9jC,UAAUmkB,MAAQ,aAErC2f,EAAmB9jC,UAAU2hB,MAAQ,aAErCmiB,EAAmB9jC,UAAU8P,qBAAuB,SAAUpP,GAC5D,IAAIqH,EAAarH,EAAGqH,WAChBgI,EAAgBrP,EAAGqP,cACnB1G,EAAS,YAAO3I,EAAI,CAAC,aAAc,kBAIvC,OADA+P,EAAwB5Q,KAAMwJ,EADjB6H,EAAU7H,EAAQtB,GAAc,GAAIlI,OAE1C,YAAS,CACdkI,WAAYA,EACZgI,cAAeA,GACd1G,IAGLy6B,EAAmB9jC,UAAU2d,eAAiB,WAC5C,MAAO,CACL/W,EAAG,CACD2P,IAAK,EACL7C,IAAK,GAEP7M,EAAG,CACD0P,IAAK,EACL7C,IAAK,KAKXowB,EAAmB9jC,UAAUgR,gBAAkB,SAAUtL,GACvD,OAAO7F,KAAKkkC,aAAar+B,IAAQ,GAGnCo+B,EAAmB9jC,UAAU+B,OAAS,WACpClC,KAAKskB,SA/CT,CAmDEvQ","file":"05d954cf-20b8fbdb709b38ef2f92.js","sourcesContent":["import { __values, __read, __assign, __rest, __spread, __extends } from 'tslib';\nimport sync, { getFrameData, cancelSync } from 'framesync';\nimport { velocityPerSecond, cubicBezier, linear, easeIn, easeInOut, easeOut, circIn, circInOut, circOut, backIn, backInOut, backOut, anticipate, bounceIn, bounceInOut, bounceOut, inertia, animate as animate$1, mix, clamp, distance, progress, pipe, interpolate, wrap } from 'popmotion';\nimport { invariant, warning } from 'hey-listen';\nimport { complex, number, color, px, percent, degrees, vw, vh, scale, alpha, progressPercentage } from 'style-value-types';\nimport React, { useRef, createContext, useContext, useEffect, createElement, useMemo, useLayoutEffect, forwardRef, Fragment, Component as Component$1, useCallback, useState, cloneElement, Children, isValidElement } from 'react';\n\nvar isRefObject = function isRefObject(ref) {\n return typeof ref === \"object\" && ref.hasOwnProperty(\"current\");\n};\n/**\n * A generic subscription manager.\n */\n\n\nvar SubscriptionManager =\n/** @class */\nfunction () {\n function SubscriptionManager() {\n this.subscriptions = new Set();\n }\n\n SubscriptionManager.prototype.add = function (handler) {\n var _this = this;\n\n this.subscriptions.add(handler);\n return function () {\n return void _this.subscriptions.delete(handler);\n };\n };\n\n SubscriptionManager.prototype.notify = function (\n /**\n * Using ...args would be preferable but it's array creation and this\n * might be fired every frame.\n */\n a, b, c) {\n var e_1, _a;\n\n if (!this.subscriptions.size) return;\n\n try {\n for (var _b = __values(this.subscriptions), _c = _b.next(); !_c.done; _c = _b.next()) {\n var handler = _c.value;\n handler(a, b, c);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n };\n\n SubscriptionManager.prototype.clear = function () {\n this.subscriptions.clear();\n };\n\n return SubscriptionManager;\n}();\n\nvar isFloat = function isFloat(value) {\n return !isNaN(parseFloat(value));\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\n\n\nvar MotionValue =\n/** @class */\nfunction () {\n /**\n * @param init - The initiating value\n * @param config - Optional configuration options\n *\n * - `transformer`: A function to transform incoming values with.\n *\n * @internal\n */\n function MotionValue(init) {\n var _this = this;\n /**\n * Duration, in milliseconds, since last updating frame.\n *\n * @internal\n */\n\n\n this.timeDelta = 0;\n /**\n * Timestamp of the last time this `MotionValue` was updated.\n *\n * @internal\n */\n\n this.lastUpdated = 0;\n /**\n * Functions to notify when the `MotionValue` updates.\n *\n * @internal\n */\n\n this.updateSubscribers = new SubscriptionManager();\n /**\n * Functions to notify when the `MotionValue` updates and `render` is set to `true`.\n *\n * @internal\n */\n\n this.renderSubscribers = new SubscriptionManager();\n /**\n * Tracks whether this value can output a velocity. Currently this is only true\n * if the value is numerical, but we might be able to widen the scope here and support\n * other value types.\n *\n * @internal\n */\n\n this.canTrackVelocity = false;\n\n this.updateAndNotify = function (v, render) {\n if (render === void 0) {\n render = true;\n }\n\n _this.prev = _this.current;\n _this.current = v;\n\n if (_this.prev !== _this.current) {\n _this.updateSubscribers.notify(_this.current);\n }\n\n if (render) {\n _this.renderSubscribers.notify(_this.current);\n } // Update timestamp\n\n\n var _a = getFrameData(),\n delta = _a.delta,\n timestamp = _a.timestamp;\n\n if (_this.lastUpdated !== timestamp) {\n _this.timeDelta = delta;\n _this.lastUpdated = timestamp;\n sync.postRender(_this.scheduleVelocityCheck);\n }\n };\n /**\n * Schedule a velocity check for the next frame.\n *\n * This is an instanced and bound function to prevent generating a new\n * function once per frame.\n *\n * @internal\n */\n\n\n this.scheduleVelocityCheck = function () {\n return sync.postRender(_this.velocityCheck);\n };\n /**\n * Updates `prev` with `current` if the value hasn't been updated this frame.\n * This ensures velocity calculations return `0`.\n *\n * This is an instanced and bound function to prevent generating a new\n * function once per frame.\n *\n * @internal\n */\n\n\n this.velocityCheck = function (_a) {\n var timestamp = _a.timestamp;\n\n if (timestamp !== _this.lastUpdated) {\n _this.prev = _this.current;\n }\n };\n\n this.set(init, false);\n this.canTrackVelocity = isFloat(this.current);\n }\n /**\n * Adds a function that will be notified when the `MotionValue` is updated.\n *\n * It returns a function that, when called, will cancel the subscription.\n *\n * When calling `onChange` inside a React component, it should be wrapped with the\n * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n * from the `useEffect` function to ensure you don't add duplicate subscribers..\n *\n * @library\n *\n * ```jsx\n * function MyComponent() {\n * const x = useMotionValue(0)\n * const y = useMotionValue(0)\n * const opacity = useMotionValue(1)\n *\n * useEffect(() => {\n * function updateOpacity() {\n * const maxXY = Math.max(x.get(), y.get())\n * const newOpacity = transform(maxXY, [0, 100], [1, 0])\n * opacity.set(newOpacity)\n * }\n *\n * const unsubscribeX = x.onChange(updateOpacity)\n * const unsubscribeY = y.onChange(updateOpacity)\n *\n * return () => {\n * unsubscribeX()\n * unsubscribeY()\n * }\n * }, [])\n *\n * return \n * }\n * ```\n *\n * @motion\n *\n * ```jsx\n * export const MyComponent = () => {\n * const x = useMotionValue(0)\n * const y = useMotionValue(0)\n * const opacity = useMotionValue(1)\n *\n * useEffect(() => {\n * function updateOpacity() {\n * const maxXY = Math.max(x.get(), y.get())\n * const newOpacity = transform(maxXY, [0, 100], [1, 0])\n * opacity.set(newOpacity)\n * }\n *\n * const unsubscribeX = x.onChange(updateOpacity)\n * const unsubscribeY = y.onChange(updateOpacity)\n *\n * return () => {\n * unsubscribeX()\n * unsubscribeY()\n * }\n * }, [])\n *\n * return \n * }\n * ```\n *\n * @internalremarks\n *\n * We could look into a `useOnChange` hook if the above lifecycle management proves confusing.\n *\n * ```jsx\n * useOnChange(x, () => {})\n * ```\n *\n * @param subscriber - A function that receives the latest value.\n * @returns A function that, when called, will cancel this subscription.\n *\n * @public\n */\n\n\n MotionValue.prototype.onChange = function (subscription) {\n return this.updateSubscribers.add(subscription);\n };\n\n MotionValue.prototype.clearListeners = function () {\n this.updateSubscribers.clear();\n };\n /**\n * Adds a function that will be notified when the `MotionValue` requests a render.\n *\n * @param subscriber - A function that's provided the latest value.\n * @returns A function that, when called, will cancel this subscription.\n *\n * @internal\n */\n\n\n MotionValue.prototype.onRenderRequest = function (subscription) {\n // Render immediately\n subscription(this.get());\n return this.renderSubscribers.add(subscription);\n };\n /**\n * Attaches a passive effect to the `MotionValue`.\n *\n * @internal\n */\n\n\n MotionValue.prototype.attach = function (passiveEffect) {\n this.passiveEffect = passiveEffect;\n };\n /**\n * Sets the state of the `MotionValue`.\n *\n * @remarks\n *\n * ```jsx\n * const x = useMotionValue(0)\n * x.set(10)\n * ```\n *\n * @param latest - Latest value to set.\n * @param render - Whether to notify render subscribers. Defaults to `true`\n *\n * @public\n */\n\n\n MotionValue.prototype.set = function (v, render) {\n if (render === void 0) {\n render = true;\n }\n\n if (!render || !this.passiveEffect) {\n this.updateAndNotify(v, render);\n } else {\n this.passiveEffect(v, this.updateAndNotify);\n }\n };\n /**\n * Returns the latest state of `MotionValue`\n *\n * @returns - The latest state of `MotionValue`\n *\n * @public\n */\n\n\n MotionValue.prototype.get = function () {\n return this.current;\n };\n /**\n * @public\n */\n\n\n MotionValue.prototype.getPrevious = function () {\n return this.prev;\n };\n /**\n * Returns the latest velocity of `MotionValue`\n *\n * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\n *\n * @public\n */\n\n\n MotionValue.prototype.getVelocity = function () {\n // This could be isFloat(this.prev) && isFloat(this.current), but that would be wasteful\n return this.canTrackVelocity ? // These casts could be avoided if parseFloat would be typed better\n velocityPerSecond(parseFloat(this.current) - parseFloat(this.prev), this.timeDelta) : 0;\n };\n /**\n * Registers a new animation to control this `MotionValue`. Only one\n * animation can drive a `MotionValue` at one time.\n *\n * ```jsx\n * value.start()\n * ```\n *\n * @param animation - A function that starts the provided animation\n *\n * @internal\n */\n\n\n MotionValue.prototype.start = function (animation) {\n var _this = this;\n\n this.stop();\n return new Promise(function (resolve) {\n _this.stopAnimation = animation(resolve);\n }).then(function () {\n return _this.clearAnimation();\n });\n };\n /**\n * Stop the currently active animation.\n *\n * @public\n */\n\n\n MotionValue.prototype.stop = function () {\n if (this.stopAnimation) this.stopAnimation();\n this.clearAnimation();\n };\n /**\n * Returns `true` if this value is currently animating.\n *\n * @public\n */\n\n\n MotionValue.prototype.isAnimating = function () {\n return !!this.stopAnimation;\n };\n\n MotionValue.prototype.clearAnimation = function () {\n this.stopAnimation = null;\n };\n /**\n * Destroy and clean up subscribers to this `MotionValue`.\n *\n * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\n * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\n * created a `MotionValue` via the `motionValue` function.\n *\n * @public\n */\n\n\n MotionValue.prototype.destroy = function () {\n this.updateSubscribers.clear();\n this.renderSubscribers.clear();\n this.stop();\n };\n\n return MotionValue;\n}();\n/**\n * @internal\n */\n\n\nfunction motionValue(init) {\n return new MotionValue(init);\n}\n/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n\n\nvar secondsToMilliseconds = function secondsToMilliseconds(seconds) {\n return seconds * 1000;\n};\n\nvar easingLookup = {\n linear: linear,\n easeIn: easeIn,\n easeInOut: easeInOut,\n easeOut: easeOut,\n circIn: circIn,\n circInOut: circInOut,\n circOut: circOut,\n backIn: backIn,\n backInOut: backInOut,\n backOut: backOut,\n anticipate: anticipate,\n bounceIn: bounceIn,\n bounceInOut: bounceInOut,\n bounceOut: bounceOut\n};\n\nvar easingDefinitionToFunction = function easingDefinitionToFunction(definition) {\n if (Array.isArray(definition)) {\n // If cubic bezier definition, create bezier curve\n invariant(definition.length === 4, \"Cubic bezier arrays must contain four numerical values.\");\n\n var _a = __read(definition, 4),\n x1 = _a[0],\n y1 = _a[1],\n x2 = _a[2],\n y2 = _a[3];\n\n return cubicBezier(x1, y1, x2, y2);\n } else if (typeof definition === \"string\") {\n // Else lookup from table\n invariant(easingLookup[definition] !== undefined, \"Invalid easing type '\" + definition + \"'\");\n return easingLookup[definition];\n }\n\n return definition;\n};\n\nvar isEasingArray = function isEasingArray(ease) {\n return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\n\n\nvar isAnimatable = function isAnimatable(key, value) {\n // If the list of keys tat might be non-animatable grows, replace with Set\n if (key === \"zIndex\") return false; // If it's a number or a keyframes array, we can animate it. We might at some point\n // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n // but for now lets leave it like this for performance reasons\n\n if (typeof value === \"number\" || Array.isArray(value)) return true;\n\n if (typeof value === \"string\" && // It's animatable if we have a string\n complex.test(value) && // And it contains numbers and/or colors\n !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n ) {\n return true;\n }\n\n return false;\n};\n\nvar isKeyframesTarget = function isKeyframesTarget(v) {\n return Array.isArray(v);\n};\n\nvar underDampedSpring = function underDampedSpring() {\n return {\n type: \"spring\",\n stiffness: 500,\n damping: 25,\n restDelta: 0.5,\n restSpeed: 10\n };\n};\n\nvar overDampedSpring = function overDampedSpring(to) {\n return {\n type: \"spring\",\n stiffness: 550,\n damping: to === 0 ? 100 : 30,\n restDelta: 0.01,\n restSpeed: 10\n };\n};\n\nvar linearTween = function linearTween() {\n return {\n type: \"keyframes\",\n ease: \"linear\",\n duration: 0.3\n };\n};\n\nvar keyframes = function keyframes(values) {\n return {\n type: \"keyframes\",\n duration: 0.8,\n values: values\n };\n};\n\nvar defaultTransitions = {\n x: underDampedSpring,\n y: underDampedSpring,\n z: underDampedSpring,\n rotate: underDampedSpring,\n rotateX: underDampedSpring,\n rotateY: underDampedSpring,\n rotateZ: underDampedSpring,\n scaleX: overDampedSpring,\n scaleY: overDampedSpring,\n scale: overDampedSpring,\n opacity: linearTween,\n backgroundColor: linearTween,\n color: linearTween,\n default: overDampedSpring\n};\n\nvar getDefaultTransition = function getDefaultTransition(valueKey, to) {\n var transitionFactory;\n\n if (isKeyframesTarget(to)) {\n transitionFactory = keyframes;\n } else {\n transitionFactory = defaultTransitions[valueKey] || defaultTransitions.default;\n }\n\n return __assign({\n to: to\n }, transitionFactory(to));\n};\n/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\n\n\nfunction isTransitionDefined(_a) {\n var when = _a.when,\n delay = _a.delay,\n delayChildren = _a.delayChildren,\n staggerChildren = _a.staggerChildren,\n staggerDirection = _a.staggerDirection,\n repeat = _a.repeat,\n repeatType = _a.repeatType,\n repeatDelay = _a.repeatDelay,\n from = _a.from,\n transition = __rest(_a, [\"when\", \"delay\", \"delayChildren\", \"staggerChildren\", \"staggerDirection\", \"repeat\", \"repeatType\", \"repeatDelay\", \"from\"]);\n\n return !!Object.keys(transition).length;\n}\n/**\n * Convert Framer Motion's Transition type into Popmotion-compatible options.\n */\n\n\nfunction convertTransitionToAnimationOptions(_a) {\n var yoyo = _a.yoyo,\n loop = _a.loop,\n flip = _a.flip,\n ease = _a.ease,\n times = _a.times,\n transition = __rest(_a, [\"yoyo\", \"loop\", \"flip\", \"ease\", \"times\"]);\n\n var options = __assign({}, transition);\n\n if (times) {\n options.offset = times;\n }\n /**\n * Convert any existing durations from seconds to milliseconds\n */\n\n\n if (transition.duration) options[\"duration\"] = secondsToMilliseconds(transition.duration);\n if (transition.repeatDelay) options.repeatDelay = secondsToMilliseconds(transition.repeatDelay);\n /**\n * Map easing names to Popmotion's easing functions\n */\n\n if (ease) {\n options[\"ease\"] = isEasingArray(ease) ? ease.map(easingDefinitionToFunction) : easingDefinitionToFunction(ease);\n }\n /**\n * Support legacy transition API\n */\n\n\n if (transition.type === \"tween\") options.type = \"keyframes\";\n\n if (yoyo) {\n options.repeatType = \"reverse\";\n } else if (loop) {\n options.repeatType = \"loop\";\n } else if (flip) {\n options.repeatType = \"mirror\";\n }\n\n options.repeat = loop || yoyo || flip || transition.repeat;\n /**\n * TODO: Popmotion 9 has the ability to automatically detect whether to use\n * a keyframes or spring animation, but does so by detecting velocity and other spring options.\n * It'd be good to introduce a similar thing here.\n */\n\n if (transition.type !== \"spring\") options.type = \"keyframes\";\n return options;\n}\n/**\n * Get the delay for a value by checking Transition with decreasing specificity.\n */\n\n\nfunction getDelayFromTransition(transition, key) {\n var _a, _b, _c, _d, _e;\n\n return (_e = (_d = (_b = (_a = transition[key]) === null || _a === void 0 ? void 0 : _a.delay) !== null && _b !== void 0 ? _b : (_c = transition[\"default\"]) === null || _c === void 0 ? void 0 : _c.delay) !== null && _d !== void 0 ? _d : transition.delay) !== null && _e !== void 0 ? _e : 0;\n}\n\nfunction hydrateKeyframes(options) {\n if (Array.isArray(options.to) && options.to[0] === null) {\n options.to = __spread(options.to);\n options.to[0] = options.from;\n }\n\n return options;\n}\n\nfunction getPopmotionAnimationOptions(transition, options, key) {\n var _a;\n\n if (Array.isArray(options.to)) {\n (_a = transition.duration) !== null && _a !== void 0 ? _a : transition.duration = 0.8;\n }\n\n hydrateKeyframes(options);\n /**\n * Get a default transition if none is determined to be defined.\n */\n\n if (!isTransitionDefined(transition)) {\n transition = __assign(__assign({}, transition), getDefaultTransition(key, options.to));\n }\n\n return __assign(__assign({}, options), convertTransitionToAnimationOptions(transition));\n}\n/**\n *\n */\n\n\nfunction getAnimation(key, value, target, transition, onComplete) {\n var _a;\n\n var valueTransition = getValueTransition(transition, key);\n var origin = (_a = valueTransition.from) !== null && _a !== void 0 ? _a : value.get();\n var isTargetAnimatable = isAnimatable(key, target);\n /**\n * If we're trying to animate from \"none\", try and get an animatable version\n * of the target. This could be improved to work both ways.\n */\n\n if (origin === \"none\" && isTargetAnimatable && typeof target === \"string\") {\n origin = complex.getAnimatableNone(target);\n }\n\n var isOriginAnimatable = isAnimatable(key, origin);\n warning(isOriginAnimatable === isTargetAnimatable, \"You are trying to animate \" + key + \" from \\\"\" + origin + \"\\\" to \\\"\" + target + \"\\\". \" + origin + \" is not an animatable value - to enable this animation set \" + origin + \" to a value animatable to \" + target + \" via the `style` property.\");\n\n function start() {\n var options = {\n from: origin,\n to: target,\n velocity: value.getVelocity(),\n onComplete: onComplete,\n onUpdate: function onUpdate(v) {\n return value.set(v);\n }\n };\n return valueTransition.type === \"inertia\" || valueTransition.type === \"decay\" ? inertia(__assign(__assign({}, options), valueTransition)) : animate$1(__assign(__assign({}, getPopmotionAnimationOptions(valueTransition, options, key)), {\n onUpdate: function onUpdate(v) {\n var _a;\n\n options.onUpdate(v);\n (_a = valueTransition.onUpdate) === null || _a === void 0 ? void 0 : _a.call(valueTransition, v);\n },\n onComplete: function onComplete() {\n var _a;\n\n options.onComplete();\n (_a = valueTransition.onComplete) === null || _a === void 0 ? void 0 : _a.call(valueTransition);\n }\n }));\n }\n\n function set() {\n var _a;\n\n value.set(target);\n onComplete();\n (_a = valueTransition === null || valueTransition === void 0 ? void 0 : valueTransition.onComplete) === null || _a === void 0 ? void 0 : _a.call(valueTransition);\n return {\n stop: function stop() {}\n };\n }\n\n return !isOriginAnimatable || !isTargetAnimatable || valueTransition.type === false ? set : start;\n}\n\nfunction getValueTransition(transition, key) {\n return transition[key] || transition[\"default\"] || transition;\n}\n/**\n * Start animation on a MotionValue. This function is an interface between\n * Framer Motion and Popmotion\n *\n * @internal\n */\n\n\nfunction startAnimation(key, value, target, transition) {\n if (transition === void 0) {\n transition = {};\n }\n\n return value.start(function (onComplete) {\n var delayTimer;\n var controls;\n var animation = getAnimation(key, value, target, transition, onComplete);\n var delay = getDelayFromTransition(transition, key);\n\n var start = function start() {\n return controls = animation();\n };\n\n if (delay) {\n delayTimer = setTimeout(start, secondsToMilliseconds(delay));\n } else {\n start();\n }\n\n return function () {\n clearTimeout(delayTimer);\n controls === null || controls === void 0 ? void 0 : controls.stop();\n };\n });\n}\n\nvar isCustomValue = function isCustomValue(v) {\n return Boolean(v && typeof v === \"object\" && v.mix && v.toValue);\n};\n\nvar resolveFinalValueInKeyframes = function resolveFinalValueInKeyframes(v) {\n // TODO maybe throw if v.length - 1 is placeholder token?\n return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n};\n/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\n\n\nvar isNumericalString = function isNumericalString(v) {\n return /^\\-?\\d*\\.?\\d+$/.test(v);\n};\n/**\n * ValueType for \"auto\"\n */\n\n\nvar auto = {\n test: function test(v) {\n return v === \"auto\";\n },\n parse: function parse(v) {\n return v;\n }\n};\n/**\n * ValueType for ints\n */\n\nvar int = __assign(__assign({}, number), {\n transform: Math.round\n});\n/**\n * A map of default value types for common values\n */\n\n\nvar defaultValueTypes = {\n // Color props\n color: color,\n backgroundColor: color,\n outlineColor: color,\n fill: color,\n stroke: color,\n // Border props\n borderColor: color,\n borderTopColor: color,\n borderRightColor: color,\n borderBottomColor: color,\n borderLeftColor: color,\n borderWidth: px,\n borderTopWidth: px,\n borderRightWidth: px,\n borderBottomWidth: px,\n borderLeftWidth: px,\n borderRadius: px,\n radius: px,\n borderTopLeftRadius: px,\n borderTopRightRadius: px,\n borderBottomRightRadius: px,\n borderBottomLeftRadius: px,\n // Positioning props\n width: px,\n maxWidth: px,\n height: px,\n maxHeight: px,\n size: px,\n top: px,\n right: px,\n bottom: px,\n left: px,\n // Spacing props\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n // Transform props\n rotate: degrees,\n rotateX: degrees,\n rotateY: degrees,\n rotateZ: degrees,\n scale: scale,\n scaleX: scale,\n scaleY: scale,\n scaleZ: scale,\n skew: degrees,\n skewX: degrees,\n skewY: degrees,\n distance: px,\n translateX: px,\n translateY: px,\n translateZ: px,\n x: px,\n y: px,\n z: px,\n perspective: px,\n transformPerspective: px,\n opacity: alpha,\n originX: progressPercentage,\n originY: progressPercentage,\n originZ: px,\n // Misc\n zIndex: int,\n // SVG\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int\n};\n/**\n * A list of value types commonly used for dimensions\n */\n\nvar dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a provided value against a ValueType\n */\n\nvar testValueType = function testValueType(v) {\n return function (type) {\n return type.test(v);\n };\n};\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\n\n\nvar findDimensionValueType = function findDimensionValueType(v) {\n return dimensionValueTypes.find(testValueType(v));\n};\n/**\n * A list of all ValueTypes\n */\n\n\nvar valueTypes = __spread(dimensionValueTypes, [color, complex]);\n/**\n * Tests a value against the list of ValueTypes\n */\n\n\nvar findValueType = function findValueType(v) {\n return valueTypes.find(testValueType(v));\n};\n/**\n * Gets the default ValueType for the provided value key\n */\n\n\nvar getDefaultValueType = function getDefaultValueType(key) {\n return defaultValueTypes[key];\n};\n/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\n\n\nvar getValueAsType = function getValueAsType(value, type) {\n return type && typeof value === \"number\" ? type.transform(value) : value;\n};\n/**\n * Decides if the supplied variable is a function that returns a variant\n */\n\n\nfunction isVariantResolver(variant) {\n return typeof variant === \"function\";\n}\n/**\n * Decides if the supplied variable is an array of variant labels\n */\n\n\nfunction isVariantLabels(v) {\n return Array.isArray(v);\n}\n/**\n * Decides if the supplied variable is variant label\n */\n\n\nfunction isVariantLabel(v) {\n return typeof v === \"string\" || isVariantLabels(v);\n}\n/**\n * Creates an object containing the latest state of every MotionValue on a VisualElement\n */\n\n\nfunction getCurrent(visualElement) {\n var current = {};\n visualElement.forEachValue(function (value, key) {\n return current[key] = value.get();\n });\n return current;\n}\n/**\n * Creates an object containing the latest velocity of every MotionValue on a VisualElement\n */\n\n\nfunction getVelocity(visualElement) {\n var velocity = {};\n visualElement.forEachValue(function (value, key) {\n return velocity[key] = value.getVelocity();\n });\n return velocity;\n}\n/**\n * Resovles a variant if it's a variant resolver\n */\n\n\nfunction resolveVariant(visualElement, variant, custom) {\n var resolved = {};\n\n if (!variant) {\n return resolved;\n } else if (isVariantResolver(variant)) {\n resolved = variant(custom !== null && custom !== void 0 ? custom : visualElement.getVariantPayload(), getCurrent(visualElement), getVelocity(visualElement));\n } else {\n resolved = variant;\n }\n\n return __assign({\n transition: visualElement.getDefaultTransition()\n }, resolved);\n}\n/**\n * Set VisualElement's MotionValue, creating a new MotionValue for it if\n * it doesn't exist.\n */\n\n\nfunction setMotionValue(visualElement, key, value) {\n if (visualElement.hasValue(key)) {\n visualElement.getValue(key).set(value);\n } else {\n visualElement.addValue(key, motionValue(value));\n }\n}\n\nfunction setTarget(visualElement, definition, _a) {\n var priority = (_a === void 0 ? {} : _a).priority;\n\n var _b = visualElement.makeTargetAnimatable(resolveVariant(visualElement, definition), false),\n _c = _b.transitionEnd,\n transitionEnd = _c === void 0 ? {} : _c,\n transition = _b.transition,\n target = __rest(_b, [\"transitionEnd\", \"transition\"]);\n\n target = __assign(__assign({}, target), transitionEnd);\n\n for (var key in target) {\n var value = resolveFinalValueInKeyframes(target[key]);\n setMotionValue(visualElement, key, value);\n if (!priority) visualElement.baseTarget[key] = value;\n }\n}\n\nfunction setVariants(visualElement, variantLabels) {\n var reversedLabels = __spread(variantLabels).reverse();\n\n reversedLabels.forEach(function (key) {\n var _a;\n\n setTarget(visualElement, visualElement.getVariant(key));\n (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {\n setVariants(child, variantLabels);\n });\n });\n}\n\nfunction setValues(visualElement, definition) {\n if (Array.isArray(definition)) {\n return setVariants(visualElement, definition);\n } else if (typeof definition === \"string\") {\n return setVariants(visualElement, [definition]);\n } else {\n setTarget(visualElement, definition);\n }\n}\n\nfunction checkTargetForNewValues(visualElement, target, origin) {\n var _a, _b;\n\n var _c;\n\n var newValueKeys = Object.keys(target).filter(function (key) {\n return !visualElement.hasValue(key);\n });\n var numNewValues = newValueKeys.length;\n if (!numNewValues) return;\n\n for (var i = 0; i < numNewValues; i++) {\n var key = newValueKeys[i];\n var targetValue = target[key];\n var value = null; // If this is a keyframes value, we can attempt to use the first value in the\n // array as that's going to be the first value of the animation anyway\n\n if (Array.isArray(targetValue)) {\n value = targetValue[0];\n } // If it isn't a keyframes or the first keyframes value was set as `null`, read the\n // value from the DOM. It might be worth investigating whether to check props (for SVG)\n // or props.style (for HTML) if the value exists there before attempting to read.\n\n\n if (value === null) {\n var readValue = (_a = origin[key]) !== null && _a !== void 0 ? _a : visualElement.readNativeValue(key);\n value = readValue !== undefined ? readValue : target[key];\n invariant(value !== null, \"No initial value for \\\"\" + key + \"\\\" can be inferred. Ensure an initial value for \\\"\" + key + \"\\\" is defined on the component.\");\n }\n\n if (typeof value === \"string\" && isNumericalString(value)) {\n // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n value = parseFloat(value);\n } else if (!findValueType(value) && complex.test(targetValue)) {\n // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n value = complex.getAnimatableNone(targetValue);\n }\n\n visualElement.addValue(key, motionValue(value));\n (_b = (_c = origin)[key]) !== null && _b !== void 0 ? _b : _c[key] = value;\n visualElement.baseTarget[key] = value;\n }\n}\n\nfunction getOriginFromTransition(key, transition) {\n if (!transition) return;\n var valueTransition = transition[key] || transition[\"default\"] || transition;\n return valueTransition.from;\n}\n\nfunction getOrigin(target, transition, visualElement) {\n var _a, _b;\n\n var origin = {};\n\n for (var key in target) {\n origin[key] = (_a = getOriginFromTransition(key, transition)) !== null && _a !== void 0 ? _a : (_b = visualElement.getValue(key)) === null || _b === void 0 ? void 0 : _b.get();\n }\n\n return origin;\n}\n/**\n * @internal\n */\n\n\nfunction startVisualElementAnimation(visualElement, definition, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n if (opts.priority) {\n visualElement.activeOverrides.add(opts.priority);\n }\n\n visualElement.resetIsAnimating(opts.priority);\n var animation;\n\n if (isVariantLabels(definition)) {\n animation = animateVariantLabels(visualElement, definition, opts);\n } else if (isVariantLabel(definition)) {\n animation = animateVariant(visualElement, definition, opts);\n } else {\n animation = animateTarget(visualElement, definition, opts);\n }\n\n visualElement.onAnimationStart();\n return animation.then(function () {\n return visualElement.onAnimationComplete();\n });\n}\n\nfunction animateVariantLabels(visualElement, variantLabels, opts) {\n var animations = __spread(variantLabels).reverse().map(function (label) {\n return animateVariant(visualElement, label, opts);\n });\n\n return Promise.all(animations);\n}\n\nfunction animateVariant(visualElement, label, opts) {\n var _a;\n\n var priority = opts && opts.priority || 0;\n var variantDefinition = visualElement.getVariant(label);\n var variant = resolveVariant(visualElement, variantDefinition, opts && opts.custom);\n var transition = variant.transition || {};\n /**\n * If we have a variant, create a callback that runs it as an animation.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n\n var getAnimation = variantDefinition ? function () {\n return animateTarget(visualElement, variant, opts);\n } : function () {\n return Promise.resolve();\n };\n /**\n * If we have children, create a callback that runs all their animations.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n\n var getChildrenAnimations = ((_a = visualElement.variantChildrenOrder) === null || _a === void 0 ? void 0 : _a.size) ? function (forwardDelay) {\n if (forwardDelay === void 0) {\n forwardDelay = 0;\n }\n\n var _a = transition.delayChildren,\n delayChildren = _a === void 0 ? 0 : _a;\n return animateChildren(visualElement, label, delayChildren + forwardDelay, transition.staggerChildren, transition.staggerDirection, priority, opts === null || opts === void 0 ? void 0 : opts.custom);\n } : function () {\n return Promise.resolve();\n };\n /**\n * If the transition explicitly defines a \"when\" option, we need to resolve either\n * this animation or all children animations before playing the other.\n */\n\n var when = transition.when;\n\n if (when) {\n var _b = __read(when === \"beforeChildren\" ? [getAnimation, getChildrenAnimations] : [getChildrenAnimations, getAnimation], 2),\n first = _b[0],\n last = _b[1];\n\n return first().then(last);\n } else {\n return Promise.all([getAnimation(), getChildrenAnimations(opts === null || opts === void 0 ? void 0 : opts.delay)]);\n }\n}\n\nfunction animateChildren(visualElement, variantLabel, delayChildren, staggerChildren, staggerDirection, priority, custom) {\n if (delayChildren === void 0) {\n delayChildren = 0;\n }\n\n if (staggerChildren === void 0) {\n staggerChildren = 0;\n }\n\n if (staggerDirection === void 0) {\n staggerDirection = 1;\n }\n\n if (priority === void 0) {\n priority = 0;\n }\n\n var animations = [];\n var maxStaggerDuration = (visualElement.variantChildrenOrder.size - 1) * staggerChildren;\n var generateStaggerDuration = staggerDirection === 1 ? function (i) {\n return i * staggerChildren;\n } : function (i) {\n return maxStaggerDuration - i * staggerChildren;\n };\n Array.from(visualElement.variantChildrenOrder).forEach(function (child, i) {\n var animation = animateVariant(child, variantLabel, {\n priority: priority,\n delay: delayChildren + generateStaggerDuration(i),\n custom: custom\n });\n animations.push(animation);\n });\n return Promise.all(animations);\n}\n\nfunction stopAnimation(visualElement) {\n visualElement.forEachValue(function (value) {\n return value.stop();\n });\n}\n\nfunction animateTarget(visualElement, definition, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.delay,\n delay = _c === void 0 ? 0 : _c,\n _d = _b.priority,\n priority = _d === void 0 ? 0 : _d,\n transitionOverride = _b.transitionOverride,\n custom = _b.custom;\n\n var targetAndTransition = resolveVariant(visualElement, definition, custom);\n if (transitionOverride) targetAndTransition.transition = transitionOverride;\n\n var _e = visualElement.makeTargetAnimatable(targetAndTransition),\n transitionEnd = _e.transitionEnd,\n transition = _e.transition,\n target = __rest(_e, [\"transitionEnd\", \"transition\"]);\n\n if (priority) visualElement.resolvedOverrides[priority] = target;\n var animations = [];\n\n for (var key in target) {\n var value = visualElement.getValue(key);\n if (!value || !target || target[key] === undefined) continue;\n var valueTarget = target[key];\n\n if (!priority) {\n visualElement.baseTarget[key] = resolveFinalValueInKeyframes(valueTarget);\n }\n\n if (visualElement.isAnimating.has(key)) continue;\n visualElement.isAnimating.add(key);\n animations.push(startAnimation(key, value, valueTarget, __assign({\n delay: delay\n }, transition)));\n }\n\n var allAnimations = Promise.all(animations);\n return transitionEnd ? allAnimations.then(function () {\n return setTarget(visualElement, transitionEnd, {\n priority: priority\n });\n }) : allAnimations;\n}\n\nfunction setOverride(visualElement, definition, index) {\n var _a;\n\n visualElement.overrides[index] = definition;\n (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {\n setOverride(child, definition, index);\n });\n}\n\nfunction startOverride(visualElement, index) {\n var override = visualElement.overrides[index];\n\n if (override) {\n return startVisualElementAnimation(visualElement, override, {\n priority: index\n });\n }\n}\n\nfunction clearOverride(visualElement, index) {\n var _a;\n\n (_a = visualElement.variantChildrenOrder) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {\n clearOverride(child, index);\n });\n var override = visualElement.overrides[index];\n if (!override) return;\n visualElement.activeOverrides.delete(index);\n var highest = getHighestOverridePriortiy(visualElement);\n visualElement.resetIsAnimating();\n\n if (highest) {\n var highestOverride = visualElement.overrides[highest];\n highestOverride && startOverride(visualElement, highest);\n } // Figure out which remaining values were affected by the override and animate those\n\n\n var overrideTarget = visualElement.resolvedOverrides[index];\n if (!overrideTarget) return;\n var remainingValues = {};\n\n for (var key in visualElement.baseTarget) {\n if (overrideTarget[key] !== undefined) {\n remainingValues[key] = visualElement.baseTarget[key];\n }\n }\n\n visualElement.onAnimationStart();\n animateTarget(visualElement, remainingValues).then(function () {\n visualElement.onAnimationComplete();\n });\n}\n\nfunction getHighestOverridePriortiy(visualElement) {\n if (!visualElement.activeOverrides.size) return 0;\n return Math.max.apply(Math, __spread(Array.from(visualElement.activeOverrides)));\n}\n/**\n * VisualElement is an abstract class that provides a generic animation-optimised interface to the\n * underlying renderer.\n *\n * Currently many features interact directly with HTMLVisualElement/SVGVisualElement\n * but the idea is we can create, for instance, a ThreeVisualElement that extends\n * VisualElement and we can quickly offer all the same features.\n */\n\n\nvar VisualElement =\n/** @class */\nfunction () {\n function VisualElement(parent, ref) {\n var _this = this; // An iterable list of current children\n\n\n this.children = new Set();\n /**\n * A set of values that we animate back to when a value is cleared of all overrides.\n */\n\n this.baseTarget = {};\n /**\n * A series of target overrides that we can animate to/from when overrides are set/cleared.\n */\n\n this.overrides = [];\n /**\n * A series of target overrides as they were originally resolved.\n */\n\n this.resolvedOverrides = [];\n /**\n * A Set of currently active override indexes\n */\n\n this.activeOverrides = new Set();\n /**\n * A Set of value keys that are currently animating.\n */\n\n this.isAnimating = new Set(); // The latest resolved MotionValues\n\n this.latest = {}; // A map of MotionValues used to animate this element\n\n this.values = new Map(); // Unsubscription callbacks for MotionValue subscriptions\n\n this.valueSubscriptions = new Map(); // A configuration for this VisualElement, each derived class can extend this.\n\n this.config = {};\n this.isMounted = false; // A pre-bound call to the user-provided `onUpdate` callback. This won't\n // be called more than once per frame.\n\n this.update = function () {\n return _this.config.onUpdate(_this.latest);\n }; // Pre-bound version of render\n\n\n this.triggerRender = function () {\n return _this.render();\n }; // This function gets passed to the rendered component's `ref` prop\n // and is used to mount/unmount the VisualElement\n\n\n this.ref = function (element) {\n element ? _this.mount(element) : _this.unmount();\n if (!_this.externalRef) return;\n\n if (typeof _this.externalRef === \"function\") {\n _this.externalRef(element);\n } else if (isRefObject(_this.externalRef)) {\n _this.externalRef.current = element;\n }\n }; // Create a relationship with the provided parent.\n\n\n this.parent = parent;\n this.rootParent = parent ? parent.rootParent : this;\n this.treePath = parent ? __spread(parent.treePath, [parent]) : []; // Calculate the depth of this node in the VisualElement graph\n\n this.depth = parent ? parent.depth + 1 : 0; // A reference to any externally-defined React ref. This might live better\n // outside the VisualElement and be handled in a hook.\n\n this.externalRef = ref;\n }\n\n VisualElement.prototype.getVariantPayload = function () {\n return this.config.custom;\n };\n\n VisualElement.prototype.getVariant = function (label) {\n var _a;\n\n return (_a = this.config.variants) === null || _a === void 0 ? void 0 : _a[label];\n };\n\n VisualElement.prototype.addVariantChild = function (visualElement) {\n if (!this.variantChildren) this.variantChildren = new Set();\n this.variantChildren.add(visualElement);\n };\n\n VisualElement.prototype.addVariantChildOrder = function (visualElement) {\n if (!this.variantChildrenOrder) this.variantChildrenOrder = new Set();\n this.variantChildrenOrder.add(visualElement);\n };\n\n VisualElement.prototype.onAnimationStart = function () {\n var _a, _b;\n\n (_b = (_a = this.config).onAnimationStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n\n VisualElement.prototype.onAnimationComplete = function () {\n var _a, _b;\n\n this.isMounted && ((_b = (_a = this.config).onAnimationComplete) === null || _b === void 0 ? void 0 : _b.call(_a));\n };\n\n VisualElement.prototype.getDefaultTransition = function () {\n return this.config.transition;\n };\n\n VisualElement.prototype.resetIsAnimating = function (priority) {\n var _a;\n\n if (priority === void 0) {\n priority = 0;\n }\n\n this.isAnimating.clear(); // If this isn't the highest priority gesture, block the animation\n // of anything that's currently being animated\n\n if (priority < getHighestOverridePriortiy(this)) {\n this.checkOverrideIsAnimating(priority);\n }\n\n (_a = this.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {\n return child.resetIsAnimating(priority);\n });\n };\n\n VisualElement.prototype.checkOverrideIsAnimating = function (priority) {\n var numOverrides = this.overrides.length;\n\n for (var i = priority + 1; i < numOverrides; i++) {\n var resolvedOverride = this.resolvedOverrides[i];\n\n if (resolvedOverride) {\n for (var key in resolvedOverride) {\n this.isAnimating.add(key);\n }\n }\n }\n };\n\n VisualElement.prototype.subscribe = function (child) {\n var _this = this;\n\n this.children.add(child);\n return function () {\n return _this.children.delete(child);\n };\n }; // Check whether this element has a MotionValue of the provided key\n\n\n VisualElement.prototype.hasValue = function (key) {\n return this.values.has(key);\n }; // Add a MotionValue\n\n\n VisualElement.prototype.addValue = function (key, value) {\n if (this.hasValue(key)) this.removeValue(key);\n this.values.set(key, value);\n this.setSingleStaticValue(key, value.get());\n this.subscribeToValue(key, value);\n }; // Remove a MotionValue\n\n\n VisualElement.prototype.removeValue = function (key) {\n var _a;\n\n (_a = this.valueSubscriptions.get(key)) === null || _a === void 0 ? void 0 : _a();\n this.valueSubscriptions.delete(key);\n this.values.delete(key);\n delete this.latest[key];\n };\n\n VisualElement.prototype.getValue = function (key, defaultValue) {\n var value = this.values.get(key);\n\n if (value === undefined && defaultValue !== undefined) {\n value = new MotionValue(defaultValue);\n this.addValue(key, value);\n }\n\n return value;\n }; // Iterate over all MotionValues\n\n\n VisualElement.prototype.forEachValue = function (callback) {\n this.values.forEach(callback);\n }; // Get the underlying rendered instance of this VisualElement. For instance in\n // HTMLVisualElement this will be a HTMLElement.\n\n\n VisualElement.prototype.getInstance = function () {\n return this.element;\n };\n\n VisualElement.prototype.updateConfig = function (config) {\n if (config === void 0) {\n config = {};\n }\n\n this.config = __assign({}, config);\n }; // Set a single `latest` value\n\n\n VisualElement.prototype.setSingleStaticValue = function (key, value) {\n this.latest[key] = value;\n }; // Statically set values to `latest` without needing a MotionValue\n\n\n VisualElement.prototype.setStaticValues = function (values, value) {\n if (typeof values === \"string\") {\n this.setSingleStaticValue(values, value);\n } else {\n for (var key in values) {\n this.setSingleStaticValue(key, values[key]);\n }\n }\n };\n\n VisualElement.prototype.scheduleRender = function () {\n sync.render(this.triggerRender, false, true);\n };\n\n VisualElement.prototype.scheduleUpdateLayoutDelta = function () {\n sync.preRender(this.rootParent.updateLayoutDelta, false, true);\n };\n\n VisualElement.prototype.subscribeToValue = function (key, value) {\n var _this = this;\n\n var onChange = function onChange(latest) {\n _this.setSingleStaticValue(key, latest); // Schedule onUpdate if we have an onUpdate listener and the component has mounted\n\n\n _this.element && _this.config.onUpdate && sync.update(_this.update, false, true);\n };\n\n var onRender = function onRender() {\n _this.element && _this.scheduleRender();\n };\n\n var unsubscribeOnChange = value.onChange(onChange);\n var unsubscribeOnRender = value.onRenderRequest(onRender);\n this.valueSubscriptions.set(key, function () {\n unsubscribeOnChange();\n unsubscribeOnRender();\n });\n }; // Mount the VisualElement with the actual DOM element\n\n\n VisualElement.prototype.mount = function (element) {\n invariant(!!element, \"No ref found. Ensure components created with motion.custom forward refs using React.forwardRef\");\n\n if (this.parent) {\n this.removeFromParent = this.parent.subscribe(this);\n }\n /**\n * Save the element to this.element as a semantic API, this.current to the VisualElement\n * is compatible with existing RefObject APIs.\n */\n\n\n this.element = this.current = element;\n }; // Unmount the VisualElement and cancel any scheduled updates\n\n\n VisualElement.prototype.unmount = function () {\n var _this = this;\n\n this.forEachValue(function (_, key) {\n return _this.removeValue(key);\n });\n cancelSync.update(this.update);\n cancelSync.render(this.render);\n this.removeFromParent && this.removeFromParent();\n };\n\n return VisualElement;\n}();\n\nfunction noop(any) {\n return any;\n}\n/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\n\n\nfunction convertBoundingBoxToAxisBox(_a) {\n var top = _a.top,\n left = _a.left,\n right = _a.right,\n bottom = _a.bottom;\n return {\n x: {\n min: left,\n max: right\n },\n y: {\n min: top,\n max: bottom\n }\n };\n}\n\nfunction convertAxisBoxToBoundingBox(_a) {\n var x = _a.x,\n y = _a.y;\n return {\n top: y.min,\n bottom: y.max,\n left: x.min,\n right: x.max\n };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\n\n\nfunction transformBoundingBox(_a, transformPoint) {\n var top = _a.top,\n left = _a.left,\n bottom = _a.bottom,\n right = _a.right;\n\n if (transformPoint === void 0) {\n transformPoint = noop;\n }\n\n var topLeft = transformPoint({\n x: left,\n y: top\n });\n var bottomRight = transformPoint({\n x: right,\n y: bottom\n });\n return {\n top: topLeft.y,\n left: topLeft.x,\n bottom: bottomRight.y,\n right: bottomRight.x\n };\n}\n/**\n * Create an empty axis box of zero size\n */\n\n\nfunction axisBox() {\n return {\n x: {\n min: 0,\n max: 1\n },\n y: {\n min: 0,\n max: 1\n }\n };\n}\n\nfunction copyAxisBox(box) {\n return {\n x: __assign({}, box.x),\n y: __assign({}, box.y)\n };\n}\n/**\n * Create an empty box delta\n */\n\n\nvar zeroDelta = {\n translate: 0,\n scale: 1,\n origin: 0,\n originPoint: 0\n};\n\nfunction delta() {\n return {\n x: __assign({}, zeroDelta),\n y: __assign({}, zeroDelta)\n };\n}\n/**\n * A list of all transformable axes. We'll use this list to generated a version\n * of each axes for each transform.\n */\n\n\nvar transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * An ordered array of each transformable value. By default, transform values\n * will be sorted to this order.\n */\n\nvar order = [\"perspective\", \"translate\", \"scale\", \"rotate\", \"skew\"];\n/**\n * Used to store the keys of all transforms that will distorted a measured bounding box.\n */\n\nvar boxDistortingKeys = new Set();\n/**\n * Generate a list of every possible transform key.\n */\n\nvar transformProps = [\"transformPerspective\", \"x\", \"y\", \"z\"];\norder.forEach(function (operationKey) {\n var isDistorting = new Set([\"rotate\", \"skew\"]).has(operationKey);\n transformAxes.forEach(function (axesKey) {\n var key = operationKey + axesKey;\n transformProps.push(key);\n isDistorting && boxDistortingKeys.add(key);\n });\n});\n/**\n * A function to use with Array.sort to sort transform keys by their default order.\n */\n\nfunction sortTransformProps(a, b) {\n return transformProps.indexOf(a) - transformProps.indexOf(b);\n}\n/**\n * A quick lookup for transform props.\n */\n\n\nvar transformPropSet = new Set(transformProps);\n\nfunction isTransformProp(key) {\n return transformPropSet.has(key);\n}\n/**\n * A quick lookup for transform origin props\n */\n\n\nvar transformOriginProps = new Set([\"originX\", \"originY\", \"originZ\"]);\n\nfunction isTransformOriginProp(key) {\n return transformOriginProps.has(key);\n}\n\nvar translateAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n transformPerspective: \"perspective\"\n};\n/**\n * Build a CSS transform style from individual x/y/scale etc properties.\n *\n * This outputs with a default order of transforms/scales/rotations, this can be customised by\n * providing a transformTemplate function.\n */\n\nfunction buildTransform(transform, transformKeys, transformTemplate, transformIsDefault, enableHardwareAcceleration, allowTransformNone) {\n if (enableHardwareAcceleration === void 0) {\n enableHardwareAcceleration = true;\n }\n\n if (allowTransformNone === void 0) {\n allowTransformNone = true;\n } // The transform string we're going to build into.\n\n\n var transformString = \"\"; // Transform keys into their default order - this will determine the output order.\n\n transformKeys.sort(sortTransformProps); // Track whether the defined transform has a defined z so we don't add a\n // second to enable hardware acceleration\n\n var transformHasZ = false; // Loop over each transform and build them into transformString\n\n var numTransformKeys = transformKeys.length;\n\n for (var i = 0; i < numTransformKeys; i++) {\n var key = transformKeys[i];\n transformString += (translateAlias[key] || key) + \"(\" + transform[key] + \") \";\n if (key === \"z\") transformHasZ = true;\n }\n\n if (!transformHasZ && enableHardwareAcceleration) {\n transformString += \"translateZ(0)\";\n } else {\n transformString = transformString.trim();\n } // If we have a custom `transform` template, pass our transform values and\n // generated transformString to that before returning\n\n\n if (transformTemplate) {\n transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n } else if (allowTransformNone && transformIsDefault) {\n transformString = \"none\";\n }\n\n return transformString;\n}\n/**\n * Build a transformOrigin style. Uses the same defaults as the browser for\n * undefined origins.\n */\n\n\nfunction buildTransformOrigin(_a) {\n var _b = _a.originX,\n originX = _b === void 0 ? \"50%\" : _b,\n _c = _a.originY,\n originY = _c === void 0 ? \"50%\" : _c,\n _d = _a.originZ,\n originZ = _d === void 0 ? 0 : _d;\n return originX + \" \" + originY + \" \" + originZ;\n}\n/**\n * Build a transform style that takes a calculated delta between the element's current\n * space on screen and projects it into the desired space.\n */\n\n\nfunction buildLayoutProjectionTransform(_a, treeScale) {\n var x = _a.x,\n y = _a.y;\n /**\n * The translations we use to calculate are always relative to the viewport coordinate space.\n * But when we apply scales, we also scale the coordinate space of an element and its children.\n * For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need\n * to move an element 100 pixels, we actually need to move it 200 in within that scaled space.\n */\n\n var xTranslate = x.translate / treeScale.x;\n var yTranslate = y.translate / treeScale.y;\n return \"translate3d(\" + xTranslate + \"px, \" + yTranslate + \"px, 0) scale(\" + x.scale + \", \" + y.scale + \")\";\n}\n\nvar identityProjection = buildLayoutProjectionTransform(delta(), {\n x: 1,\n y: 1\n});\n/**\n * Take the calculated delta origin and apply it as a transform string.\n */\n\nfunction buildLayoutProjectionTransformOrigin(_a) {\n var x = _a.x,\n y = _a.y;\n return x.origin * 100 + \"% \" + y.origin * 100 + \"% 0\";\n}\n/**\n * Build a transform string only from the properties that distort bounding box measurements\n * (rotate and skew)\n */\n\n\nfunction buildBoxDistortingTransforms(transform, transformKeys) {\n var transformString = \"\";\n transformKeys.sort(sortTransformProps);\n var numTransformKeys = transformKeys.length;\n\n for (var i = 0; i < numTransformKeys; i++) {\n var key = transformKeys[i];\n\n if (boxDistortingKeys.has(key)) {\n transformString += key + \"(\" + transform[key] + \") \";\n }\n }\n\n return transformString;\n}\n/**\n * Returns true if the provided key is a CSS variable\n */\n\n\nfunction isCSSVariable(key) {\n return key.startsWith(\"--\");\n}\n\nfunction isCSSVariable$1(value) {\n return typeof value === \"string\" && value.startsWith(\"var(--\");\n}\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\n\n\nvar cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\n\nfunction parseCSSVariable(current) {\n var match = cssVariableRegex.exec(current);\n if (!match) return [,];\n\n var _a = __read(match, 3),\n token = _a[1],\n fallback = _a[2];\n\n return [token, fallback];\n}\n\nvar maxDepth = 4;\n\nfunction getVariableValue(current, element, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n\n invariant(depth <= maxDepth, \"Max CSS variable fallback depth detected in property \\\"\" + current + \"\\\". This may indicate a circular fallback dependency.\");\n\n var _a = __read(parseCSSVariable(current), 2),\n token = _a[0],\n fallback = _a[1]; // No CSS variable detected\n\n\n if (!token) return; // Attempt to read this CSS variable off the element\n\n var resolved = window.getComputedStyle(element).getPropertyValue(token);\n\n if (resolved) {\n return resolved.trim();\n } else if (isCSSVariable$1(fallback)) {\n // The fallback might itself be a CSS variable, in which case we attempt to resolve it too.\n return getVariableValue(fallback, element, depth + 1);\n } else {\n return fallback;\n }\n}\n/**\n * Resolve CSS variables from\n *\n * @internal\n */\n\n\nfunction resolveCSSVariables(visualElement, _a, transitionEnd) {\n var _b;\n\n var target = __rest(_a, []);\n\n var element = visualElement.getInstance();\n if (!(element instanceof HTMLElement)) return {\n target: target,\n transitionEnd: transitionEnd\n }; // If `transitionEnd` isn't `undefined`, clone it. We could clone `target` and `transitionEnd`\n // only if they change but I think this reads clearer and this isn't a performance-critical path.\n\n if (transitionEnd) {\n transitionEnd = __assign({}, transitionEnd);\n } // Go through existing `MotionValue`s and ensure any existing CSS variables are resolved\n\n\n visualElement.forEachValue(function (value) {\n var current = value.get();\n if (!isCSSVariable$1(current)) return;\n var resolved = getVariableValue(current, element);\n if (resolved) value.set(resolved);\n }); // Cycle through every target property and resolve CSS variables. Currently\n // we only read single-var properties like `var(--foo)`, not `calc(var(--foo) + 20px)`\n\n for (var key in target) {\n var current = target[key];\n if (!isCSSVariable$1(current)) continue;\n var resolved = getVariableValue(current, element);\n if (!resolved) continue; // Clone target if it hasn't already been\n\n target[key] = resolved; // If the user hasn't already set this key on `transitionEnd`, set it to the unresolved\n // CSS variable. This will ensure that after the animation the component will reflect\n // changes in the value of the CSS variable.\n\n if (transitionEnd) (_b = transitionEnd[key]) !== null && _b !== void 0 ? _b : transitionEnd[key] = current;\n }\n\n return {\n target: target,\n transitionEnd: transitionEnd\n };\n}\n\nfunction pixelsToPercent(pixels, axis) {\n return pixels / (axis.max - axis.min) * 100;\n}\n/**\n * We always correct borderRadius as a percentage rather than pixels to reduce paints.\n * For example, if you are projecting a box that is 100px wide with a 10px borderRadius\n * into a box that is 200px wide with a 20px borderRadius, that is actually a 10%\n * borderRadius in both states. If we animate between the two in pixels that will trigger\n * a paint each time. If we animate between the two in percentage we'll avoid a paint.\n */\n\n\nfunction correctBorderRadius(latest, viewportBox) {\n /**\n * If latest is a string, if it's a percentage we can return immediately as it's\n * going to be stretched appropriately. Otherwise, if it's a pixel, convert it to a number.\n */\n if (typeof latest === \"string\") {\n if (px.test(latest)) {\n latest = parseFloat(latest);\n } else {\n return latest;\n }\n }\n /**\n * If latest is a number, it's a pixel value. We use the current viewportBox to calculate that\n * pixel value as a percentage of each axis\n */\n\n\n var x = pixelsToPercent(latest, viewportBox.x);\n var y = pixelsToPercent(latest, viewportBox.y);\n return x + \"% \" + y + \"%\";\n}\n\nvar varToken = \"_$css\";\n\nfunction correctBoxShadow(latest, _viewportBox, delta, treeScale) {\n var original = latest;\n /**\n * We need to first strip and store CSS variables from the string.\n */\n\n var containsCSSVariables = latest.includes(\"var(\");\n var cssVariables = [];\n\n if (containsCSSVariables) {\n latest = latest.replace(cssVariableRegex, function (match) {\n cssVariables.push(match);\n return varToken;\n });\n }\n\n var shadow = complex.parse(latest); // TODO: Doesn't support multiple shadows\n\n if (shadow.length > 5) return original;\n var template = complex.createTransformer(latest);\n var offset = typeof shadow[0] !== \"number\" ? 1 : 0; // Calculate the overall context scale\n\n var xScale = delta.x.scale * treeScale.x;\n var yScale = delta.y.scale * treeScale.y;\n shadow[0 + offset] /= xScale;\n shadow[1 + offset] /= yScale;\n /**\n * Ideally we'd correct x and y scales individually, but because blur and\n * spread apply to both we have to take a scale average and apply that instead.\n * We could potentially improve the outcome of this by incorporating the ratio between\n * the two scales.\n */\n\n var averageScale = mix(xScale, yScale, 0.5); // Blur\n\n if (typeof shadow[2 + offset] === \"number\") shadow[2 + offset] /= averageScale; // Spread\n\n if (typeof shadow[3 + offset] === \"number\") shadow[3 + offset] /= averageScale;\n var output = template(shadow);\n\n if (containsCSSVariables) {\n var i_1 = 0;\n output = output.replace(varToken, function () {\n var cssVariable = cssVariables[i_1];\n i_1++;\n return cssVariable;\n });\n }\n\n return output;\n}\n\nvar borderCorrectionDefinition = {\n process: correctBorderRadius\n};\nvar valueScaleCorrection = {\n borderRadius: __assign(__assign({}, borderCorrectionDefinition), {\n applyTo: [\"borderTopLeftRadius\", \"borderTopRightRadius\", \"borderBottomLeftRadius\", \"borderBottomRightRadius\"]\n }),\n borderTopLeftRadius: borderCorrectionDefinition,\n borderTopRightRadius: borderCorrectionDefinition,\n borderBottomLeftRadius: borderCorrectionDefinition,\n borderBottomRightRadius: borderCorrectionDefinition,\n boxShadow: {\n process: correctBoxShadow\n }\n};\n/**\n * @internal\n */\n\nfunction addScaleCorrection(correctors) {\n for (var key in correctors) {\n valueScaleCorrection[key] = correctors[key];\n }\n}\n/**\n * Build style and CSS variables\n *\n * This function converts a Motion style prop:\n *\n * { x: 100, width: 100, originX: 0.5 }\n *\n * Into an object with default value types applied and default\n * transform order set:\n *\n * {\n * transform: 'translateX(100px) translateZ(0)`,\n * width: '100px',\n * transformOrigin: '50% 50%'\n * }\n *\n * Styles are saved to `style` and CSS vars to `vars`.\n *\n * This function works with mutative data structures.\n */\n\n\nfunction buildHTMLStyles(latest, style, vars, transform, transformOrigin, transformKeys, _a, isLayoutProjectionEnabled, delta, deltaFinal, treeScale, targetBox) {\n var enableHardwareAcceleration = _a.enableHardwareAcceleration,\n transformTemplate = _a.transformTemplate,\n allowTransformNone = _a.allowTransformNone; // Empty the transformKeys array. As we're throwing out refs to its items\n // this might not be as cheap as suspected. Maybe using the array as a buffer\n // with a manual incrementation would be better.\n\n transformKeys.length = 0; // Track whether we encounter any transform or transformOrigin values.\n\n var hasTransform = false;\n var hasTransformOrigin = false; // Does the calculated transform essentially equal \"none\"?\n\n var transformIsNone = true;\n /**\n * Loop over all our latest animated values and decide whether to handle them\n * as a style or CSS variable. Transforms and transform origins are kept seperately\n * for further processing\n */\n\n for (var key in latest) {\n var value = latest[key]; // Convert the value to its default value type, ie 0 -> \"0px\"\n\n var valueType = getDefaultValueType(key);\n var valueAsType = getValueAsType(value, valueType);\n\n if (isTransformProp(key)) {\n // If this is a transform, flag and enable further transform processing\n hasTransform = true;\n transform[key] = valueAsType;\n transformKeys.push(key);\n if (!transformIsNone) continue; // If all the transform keys we've so far encountered are their default value\n // then check to see if this one isn't\n\n var defaultValue = valueType.default !== undefined ? valueType.default : 0;\n if (value !== defaultValue) transformIsNone = false;\n } else if (isTransformOriginProp(key)) {\n // If this is a transform origin, flag and enable further transform-origin processing\n transformOrigin[key] = valueAsType;\n hasTransformOrigin = true;\n } else if (key !== \"transform\" || typeof value !== \"function\") {\n // Handle all remaining values. Decide which map to save to depending\n // on whether this is a CSS variable\n var bucket = isCSSVariable(key) ? vars : style; // If we need to perform scale correction, and we have a handler for this\n // value type (ie borderRadius), perform it\n\n if (isLayoutProjectionEnabled && valueScaleCorrection[key]) {\n var corrected = valueScaleCorrection[key].process(value, targetBox, delta, treeScale);\n /**\n * Scale-correctable values can define a number of other values to break\n * down into. For instance borderRadius needs applying to borderBottomLeftRadius etc\n */\n\n var applyTo = valueScaleCorrection[key].applyTo;\n\n if (applyTo) {\n var num = applyTo.length;\n\n for (var i = 0; i < num; i++) {\n bucket[applyTo[i]] = corrected;\n }\n } else {\n bucket[key] = corrected;\n }\n } else {\n bucket[key] = valueAsType;\n }\n }\n }\n /**\n * Build transform and transformOrigin. If we're performing layout projection these need\n * to be based off the deltaFinal data. Any user-set origins will have been pre-baked\n * into the deltaFinal.\n */\n\n\n if (isLayoutProjectionEnabled) {\n style.transform = buildLayoutProjectionTransform(deltaFinal, treeScale);\n if (style.transform === identityProjection) style.transform = \"\";\n /**\n * If we have transform styles, build only those that distort bounding boxes (rotate/skew)\n * as translations and scales will already have been used to calculate deltaFinal.\n */\n\n if (hasTransform) {\n style.transform += \" \" + buildBoxDistortingTransforms(transform, transformKeys);\n style.transform = style.transform.trim();\n }\n\n if (transformTemplate) {\n style.transform = transformTemplate(transform, style.transform);\n }\n\n style.transformOrigin = buildLayoutProjectionTransformOrigin(deltaFinal);\n } else {\n if (hasTransform) {\n style.transform = buildTransform(transform, transformKeys, transformTemplate, transformIsNone, enableHardwareAcceleration, allowTransformNone);\n }\n\n if (hasTransformOrigin) {\n style.transformOrigin = buildTransformOrigin(transformOrigin);\n }\n }\n}\n/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\n\n\nfunction resetAxis(axis, originAxis) {\n axis.min = originAxis.min;\n axis.max = originAxis.max;\n}\n/**\n * Reset a box to the provided origin box.\n *\n * This is a mutative operation.\n */\n\n\nfunction resetBox(box, originBox) {\n resetAxis(box.x, originBox.x);\n resetAxis(box.y, originBox.y);\n}\n/**\n * Scales a point based on a factor and an originPoint\n */\n\n\nfunction scalePoint(point, scale, originPoint) {\n var distanceFromOrigin = point - originPoint;\n var scaled = scale * distanceFromOrigin;\n return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\n\n\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n if (boxScale !== undefined) {\n point = scalePoint(point, boxScale, originPoint);\n }\n\n return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\n\n\nfunction applyAxisDelta(axis, translate, scale, originPoint, boxScale) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (scale === void 0) {\n scale = 1;\n }\n\n axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);\n axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Applies a translate/scale delta to a box\n */\n\n\nfunction applyBoxDelta(box, _a) {\n var x = _a.x,\n y = _a.y;\n applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);\n applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);\n}\n/**\n * Apply a transform to an axis from the latest resolved motion values.\n * This function basically acts as a bridge between a flat motion value map\n * and applyAxisDelta\n */\n\n\nfunction applyAxisTransforms(final, axis, transforms, _a) {\n var _b = __read(_a, 3),\n key = _b[0],\n scaleKey = _b[1],\n originKey = _b[2]; // Copy the current axis to the final axis before mutation\n\n\n final.min = axis.min;\n final.max = axis.max;\n var axisOrigin = transforms[originKey] !== undefined ? transforms[originKey] : 0.5;\n var originPoint = mix(axis.min, axis.max, axisOrigin); // Apply the axis delta to the final axis\n\n applyAxisDelta(final, transforms[key], transforms[scaleKey], originPoint, transforms.scale);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\n\n\nvar xKeys = [\"x\", \"scaleX\", \"originX\"];\nvar yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\n\nfunction applyBoxTransforms(finalBox, box, transforms) {\n applyAxisTransforms(finalBox.x, box.x, transforms, xKeys);\n applyAxisTransforms(finalBox.y, box.y, transforms, yKeys);\n}\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\n\n\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n point -= translate;\n point = scalePoint(point, 1 / scale, originPoint);\n\n if (boxScale !== undefined) {\n point = scalePoint(point, 1 / boxScale, originPoint);\n }\n\n return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\n\n\nfunction removeAxisDelta(axis, translate, scale, origin, boxScale) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (scale === void 0) {\n scale = 1;\n }\n\n if (origin === void 0) {\n origin = 0.5;\n }\n\n var originPoint = mix(axis.min, axis.max, origin) - translate;\n axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);\n axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\n\n\nfunction removeAxisTransforms(axis, transforms, _a) {\n var _b = __read(_a, 3),\n key = _b[0],\n scaleKey = _b[1],\n originKey = _b[2];\n\n removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale);\n}\n/**\n * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\n\n\nfunction removeBoxTransforms(box, transforms) {\n removeAxisTransforms(box.x, transforms, xKeys);\n removeAxisTransforms(box.y, transforms, yKeys);\n}\n/**\n * Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms\n * in a tree upon our box before then calculating how to project it into our desired viewport-relative box\n *\n * This is the final nested loop within HTMLVisualElement.updateLayoutDelta\n */\n\n\nfunction applyTreeDeltas(box, treePath) {\n var treeLength = treePath.length;\n\n for (var i = 0; i < treeLength; i++) {\n applyBoxDelta(box, treePath[i].delta);\n }\n}\n\nvar clampProgress = function clampProgress(v) {\n return clamp(0, 1, v);\n};\n/**\n * Returns true if the provided value is within maxDistance of the provided target\n */\n\n\nfunction isNear(value, target, maxDistance) {\n if (target === void 0) {\n target = 0;\n }\n\n if (maxDistance === void 0) {\n maxDistance = 0.01;\n }\n\n return distance(value, target) < maxDistance;\n}\n\nfunction calcLength(axis) {\n return axis.max - axis.min;\n}\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\n\n\nfunction calcOrigin(source, target) {\n var origin = 0.5;\n var sourceLength = calcLength(source);\n var targetLength = calcLength(target);\n\n if (targetLength > sourceLength) {\n origin = progress(target.min, target.max - sourceLength, source.min);\n } else if (sourceLength > targetLength) {\n origin = progress(source.min, source.max - targetLength, target.min);\n }\n\n return clampProgress(origin);\n}\n/**\n * Update the AxisDelta with a transform that projects source into target.\n *\n * The transform `origin` is optional. If not provided, it'll be automatically\n * calculated based on the relative positions of the two bounding boxes.\n */\n\n\nfunction updateAxisDelta(delta, source, target, origin) {\n delta.origin = origin === undefined ? calcOrigin(source, target) : origin;\n delta.originPoint = mix(source.min, source.max, delta.origin);\n delta.scale = calcLength(target) / calcLength(source);\n if (isNear(delta.scale, 1, 0.0001)) delta.scale = 1;\n delta.translate = mix(target.min, target.max, delta.origin) - delta.originPoint;\n if (isNear(delta.translate)) delta.translate = 0;\n}\n/**\n * Update the BoxDelta with a transform that projects the source into the target.\n *\n * The transform `origin` is optional. If not provided, it'll be automatically\n * calculated based on the relative positions of the two bounding boxes.\n */\n\n\nfunction updateBoxDelta(delta, source, target, origin) {\n updateAxisDelta(delta.x, source.x, target.x, origin);\n updateAxisDelta(delta.y, source.y, target.y, origin);\n}\n/**\n * Update the treeScale by incorporating the parent's latest scale into its treeScale.\n */\n\n\nfunction updateTreeScale(treeScale, parentTreeScale, parentDelta) {\n treeScale.x = parentTreeScale.x * parentDelta.x.scale;\n treeScale.y = parentTreeScale.y * parentDelta.y.scale;\n} // Call a handler once for each axis\n\n\nfunction eachAxis(handler) {\n return [handler(\"x\"), handler(\"y\")];\n}\n/**\n * Measure and return the element bounding box.\n *\n * We convert the box into an AxisBox2D to make it easier to work with each axis\n * individually and programmatically.\n *\n * This function optionally accepts a transformPagePoint function which allows us to compensate\n * for, for instance, measuring the element within a scaled plane like a Framer devivce preview component.\n */\n\n\nfunction getBoundingBox(element, transformPagePoint) {\n var box = element.getBoundingClientRect();\n return convertBoundingBoxToAxisBox(transformBoundingBox(box, transformPagePoint));\n}\n\nvar positionalKeys = new Set([\"width\", \"height\", \"top\", \"left\", \"right\", \"bottom\", \"x\", \"y\"]);\n\nvar isPositionalKey = function isPositionalKey(key) {\n return positionalKeys.has(key);\n};\n\nvar hasPositionalKey = function hasPositionalKey(target) {\n return Object.keys(target).some(isPositionalKey);\n};\n\nvar setAndResetVelocity = function setAndResetVelocity(value, to) {\n // Looks odd but setting it twice doesn't render, it'll just\n // set both prev and current to the latest value\n value.set(to, false);\n value.set(to);\n};\n\nvar isNumOrPxType = function isNumOrPxType(v) {\n return v === number || v === px;\n};\n\nvar BoundingBoxDimension;\n\n(function (BoundingBoxDimension) {\n BoundingBoxDimension[\"width\"] = \"width\";\n BoundingBoxDimension[\"height\"] = \"height\";\n BoundingBoxDimension[\"left\"] = \"left\";\n BoundingBoxDimension[\"right\"] = \"right\";\n BoundingBoxDimension[\"top\"] = \"top\";\n BoundingBoxDimension[\"bottom\"] = \"bottom\";\n})(BoundingBoxDimension || (BoundingBoxDimension = {}));\n\nvar getPosFromMatrix = function getPosFromMatrix(matrix, pos) {\n return parseFloat(matrix.split(\", \")[pos]);\n};\n\nvar getTranslateFromMatrix = function getTranslateFromMatrix(pos2, pos3) {\n return function (_bbox, _a) {\n var transform = _a.transform;\n if (transform === \"none\" || !transform) return 0;\n var matrix3d = transform.match(/^matrix3d\\((.+)\\)$/);\n\n if (matrix3d) {\n return getPosFromMatrix(matrix3d[1], pos3);\n } else {\n var matrix = transform.match(/^matrix\\((.+)\\)$/);\n\n if (matrix) {\n return getPosFromMatrix(matrix[1], pos2);\n } else {\n return 0;\n }\n }\n };\n};\n\nvar transformKeys = new Set([\"x\", \"y\", \"z\"]);\nvar nonTranslationalTransformKeys = transformProps.filter(function (key) {\n return !transformKeys.has(key);\n});\n\nfunction removeNonTranslationalTransform(visualElement) {\n var removedTransforms = [];\n nonTranslationalTransformKeys.forEach(function (key) {\n var value = visualElement.getValue(key);\n\n if (value !== undefined) {\n removedTransforms.push([key, value.get()]);\n value.set(key.startsWith(\"scale\") ? 1 : 0);\n }\n }); // Apply changes to element before measurement\n\n if (removedTransforms.length) visualElement.render();\n return removedTransforms;\n}\n\nvar positionalValues = {\n // Dimensions\n width: function width(_a) {\n var x = _a.x;\n return x.max - x.min;\n },\n height: function height(_a) {\n var y = _a.y;\n return y.max - y.min;\n },\n top: function top(_bbox, _a) {\n var top = _a.top;\n return parseFloat(top);\n },\n left: function left(_bbox, _a) {\n var left = _a.left;\n return parseFloat(left);\n },\n bottom: function bottom(_a, _b) {\n var y = _a.y;\n var top = _b.top;\n return parseFloat(top) + (y.max - y.min);\n },\n right: function right(_a, _b) {\n var x = _a.x;\n var left = _b.left;\n return parseFloat(left) + (x.max - x.min);\n },\n // Transform\n x: getTranslateFromMatrix(4, 13),\n y: getTranslateFromMatrix(5, 14)\n};\n\nvar convertChangedValueTypes = function convertChangedValueTypes(target, visualElement, changedKeys) {\n var originBbox = visualElement.getBoundingBox();\n var elementComputedStyle = visualElement.getComputedStyle();\n var display = elementComputedStyle.display,\n top = elementComputedStyle.top,\n left = elementComputedStyle.left,\n bottom = elementComputedStyle.bottom,\n right = elementComputedStyle.right,\n transform = elementComputedStyle.transform;\n var originComputedStyle = {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n transform: transform\n }; // If the element is currently set to display: \"none\", make it visible before\n // measuring the target bounding box\n\n if (display === \"none\") {\n visualElement.setStaticValues(\"display\", target.display || \"block\");\n } // Apply the latest values (as set in checkAndConvertChangedValueTypes)\n\n\n visualElement.render();\n var targetBbox = visualElement.getBoundingBox();\n changedKeys.forEach(function (key) {\n // Restore styles to their **calculated computed style**, not their actual\n // originally set style. This allows us to animate between equivalent pixel units.\n var value = visualElement.getValue(key);\n setAndResetVelocity(value, positionalValues[key](originBbox, originComputedStyle));\n target[key] = positionalValues[key](targetBbox, elementComputedStyle);\n });\n return target;\n};\n\nvar checkAndConvertChangedValueTypes = function checkAndConvertChangedValueTypes(visualElement, target, origin, transitionEnd) {\n if (origin === void 0) {\n origin = {};\n }\n\n if (transitionEnd === void 0) {\n transitionEnd = {};\n }\n\n target = __assign({}, target);\n transitionEnd = __assign({}, transitionEnd);\n var targetPositionalKeys = Object.keys(target).filter(isPositionalKey); // We want to remove any transform values that could affect the element's bounding box before\n // it's measured. We'll reapply these later.\n\n var removedTransformValues = [];\n var hasAttemptedToRemoveTransformValues = false;\n var changedValueTypeKeys = [];\n targetPositionalKeys.forEach(function (key) {\n var value = visualElement.getValue(key);\n if (!visualElement.hasValue(key)) return;\n var from = origin[key];\n var to = target[key];\n var fromType = findDimensionValueType(from);\n var toType; // TODO: The current implementation of this basically throws an error\n // if you try and do value conversion via keyframes. There's probably\n // a way of doing this but the performance implications would need greater scrutiny,\n // as it'd be doing multiple resize-remeasure operations.\n\n if (isKeyframesTarget(to)) {\n var numKeyframes = to.length;\n\n for (var i = to[0] === null ? 1 : 0; i < numKeyframes; i++) {\n if (!toType) {\n toType = findDimensionValueType(to[i]);\n invariant(toType === fromType || isNumOrPxType(fromType) && isNumOrPxType(toType), \"Keyframes must be of the same dimension as the current value\");\n } else {\n invariant(findDimensionValueType(to[i]) === toType, \"All keyframes must be of the same type\");\n }\n }\n } else {\n toType = findDimensionValueType(to);\n }\n\n if (fromType !== toType) {\n // If they're both just number or px, convert them both to numbers rather than\n // relying on resize/remeasure to convert (which is wasteful in this situation)\n if (isNumOrPxType(fromType) && isNumOrPxType(toType)) {\n var current = value.get();\n\n if (typeof current === \"string\") {\n value.set(parseFloat(current));\n }\n\n if (typeof to === \"string\") {\n target[key] = parseFloat(to);\n } else if (Array.isArray(to) && toType === px) {\n target[key] = to.map(parseFloat);\n }\n } else if ((fromType === null || fromType === void 0 ? void 0 : fromType.transform) && (toType === null || toType === void 0 ? void 0 : toType.transform) && (from === 0 || to === 0)) {\n // If one or the other value is 0, it's safe to coerce it to the\n // type of the other without measurement\n if (from === 0) {\n value.set(toType.transform(from));\n } else {\n target[key] = fromType.transform(to);\n }\n } else {\n // If we're going to do value conversion via DOM measurements, we first\n // need to remove non-positional transform values that could affect the bbox measurements.\n if (!hasAttemptedToRemoveTransformValues) {\n removedTransformValues = removeNonTranslationalTransform(visualElement);\n hasAttemptedToRemoveTransformValues = true;\n }\n\n changedValueTypeKeys.push(key);\n transitionEnd[key] = transitionEnd[key] !== undefined ? transitionEnd[key] : target[key];\n setAndResetVelocity(value, to);\n }\n }\n });\n\n if (changedValueTypeKeys.length) {\n var convertedTarget = convertChangedValueTypes(target, visualElement, changedValueTypeKeys); // If we removed transform values, reapply them before the next render\n\n if (removedTransformValues.length) {\n removedTransformValues.forEach(function (_a) {\n var _b = __read(_a, 2),\n key = _b[0],\n value = _b[1];\n\n visualElement.getValue(key).set(value);\n });\n } // Reapply original values\n\n\n visualElement.render();\n return {\n target: convertedTarget,\n transitionEnd: transitionEnd\n };\n } else {\n return {\n target: target,\n transitionEnd: transitionEnd\n };\n }\n};\n/**\n * Convert value types for x/y/width/height/top/left/bottom/right\n *\n * Allows animation between `'auto'` -> `'100%'` or `0` -> `'calc(50% - 10vw)'`\n *\n * @internal\n */\n\n\nfunction unitConversion(visualElement, target, origin, transitionEnd) {\n return hasPositionalKey(target) ? checkAndConvertChangedValueTypes(visualElement, target, origin, transitionEnd) : {\n target: target,\n transitionEnd: transitionEnd\n };\n}\n/**\n * Parse a DOM variant to make it animatable. This involves resolving CSS variables\n * and ensuring animations like \"20%\" => \"calc(50vw)\" are performed in pixels.\n */\n\n\nvar parseDomVariant = function parseDomVariant(visualElement, target, origin, transitionEnd) {\n var resolved = resolveCSSVariables(visualElement, target, transitionEnd);\n target = resolved.target;\n transitionEnd = resolved.transitionEnd;\n return unitConversion(visualElement, target, origin, transitionEnd);\n};\n/**\n * A VisualElement for HTMLElements\n */\n\n\nvar HTMLVisualElement =\n/** @class */\nfunction (_super) {\n __extends(HTMLVisualElement, _super);\n\n function HTMLVisualElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n *\n */\n\n\n _this.defaultConfig = {\n enableHardwareAcceleration: true,\n allowTransformNone: true\n };\n /**\n * A mutable record of styles we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.style = {};\n /**\n * A record of styles we only want to apply via React. This gets set in useMotionValues\n * and applied in the render function. I'd prefer this to live somewhere else to decouple\n * VisualElement from React but works for now.\n */\n\n _this.reactStyle = {};\n /**\n * A mutable record of CSS variables we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.vars = {};\n /**\n * A mutable record of transforms we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.transform = {};\n /**\n * A mutable record of transform origins we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.transformOrigin = {};\n /**\n * A mutable record of transform keys we want to apply to the rendered Element. We order\n * this to order transforms in the desired order. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.transformKeys = [];\n _this.config = _this.defaultConfig;\n /**\n * ========================================\n * Layout\n * ========================================\n */\n\n _this.isLayoutProjectionEnabled = false;\n /**\n * A set of layout update event handlers. These are only called once all layouts have been read,\n * making it safe to perform DOM write operations.\n */\n\n _this.layoutUpdateListeners = new SubscriptionManager();\n _this.layoutMeasureListeners = new SubscriptionManager();\n _this.viewportBoxUpdateListeners = new SubscriptionManager();\n /**\n * Keep track of whether the viewport box has been updated since the last render.\n * If it has, we want to fire the onViewportBoxUpdate listener.\n */\n\n _this.hasViewportBoxUpdated = false;\n /**\n * The visual target we want to project our component into on a given frame\n * before applying transforms defined in `animate` or `style`.\n *\n * This is considered mutable to avoid object creation on each frame.\n */\n\n _this.targetBoxFinal = axisBox();\n /**\n * The overall scale of the local coordinate system as transformed by all parents\n * of this component. We use this for scale correction on our calculated layouts\n * and scale-affected values like `boxShadow`.\n *\n * This is considered mutable to avoid object creation on each frame.\n */\n\n _this.treeScale = {\n x: 1,\n y: 1\n };\n _this.prevTreeScale = {\n x: 1,\n y: 1\n };\n /**\n * The delta between the boxCorrected and the desired\n * targetBox (before user-set transforms are applied). The calculated output will be\n * handed to the renderer and used as part of the style correction calculations, for\n * instance calculating how to display the desired border-radius correctly.\n *\n * This is considered mutable to avoid object creation on each frame.\n */\n\n _this.delta = delta();\n /**\n * The delta between the boxCorrected and the desired targetBoxFinal. The calculated\n * output will be handed to the renderer and used to project the boxCorrected into\n * the targetBoxFinal.\n *\n * This is considered mutable to avoid object creation on each frame.\n */\n\n _this.deltaFinal = delta();\n /**\n * The computed transform string to apply deltaFinal to the element. Currently this is only\n * being used to diff and decide whether to render on the current frame, but a minor optimisation\n * could be to provide this to the buildHTMLStyle function.\n */\n\n _this.deltaTransform = identityProjection;\n /**\n *\n */\n\n _this.stopLayoutAxisAnimation = {\n x: function x() {},\n y: function y() {}\n };\n _this.isTargetBoxLocked = false;\n /**\n *\n */\n\n _this.axisProgress = {\n x: motionValue(0),\n y: motionValue(0)\n };\n\n _this.updateLayoutDelta = function () {\n _this.isLayoutProjectionEnabled && _this.box && _this.updateLayoutDeltas();\n /**\n * Ensure all children layouts are also updated.\n *\n * This uses a pre-bound function executor rather than a lamda to avoid creating a new function\n * multiple times per frame (source of mid-animation GC)\n */\n\n _this.children.forEach(fireUpdateLayoutDelta);\n };\n\n return _this;\n }\n /**\n * When a value is removed, we want to make sure it's removed from all rendered data structures.\n */\n\n\n HTMLVisualElement.prototype.removeValue = function (key) {\n _super.prototype.removeValue.call(this, key);\n\n delete this.vars[key];\n delete this.style[key];\n };\n /**\n * Empty the mutable data structures by re-creating them. We can do this every React render\n * as the comparative workload to the rest of the render is very low and this is also when\n * we want to reflect values that might have been removed by the render.\n */\n\n\n HTMLVisualElement.prototype.clean = function () {\n this.style = {};\n this.vars = {};\n this.transform = {};\n };\n\n HTMLVisualElement.prototype.updateConfig = function (config) {\n if (config === void 0) {\n config = {};\n }\n\n this.config = __assign(__assign({}, this.defaultConfig), config);\n };\n /**\n * Read a value directly from the HTMLElement style.\n */\n\n\n HTMLVisualElement.prototype.read = function (key) {\n return this.getComputedStyle()[key] || 0;\n };\n\n HTMLVisualElement.prototype.addValue = function (key, value) {\n _super.prototype.addValue.call(this, key, value); // If we have rotate values we want to foce the layoutOrigin used in layout projection\n // to the center of the element.\n\n\n if (key.startsWith(\"rotate\")) this.layoutOrigin = 0.5;\n };\n /**\n * Read a value directly from the HTMLElement in case it's not defined by a Motion\n * prop. If it's a transform, we just return a pre-defined default value as reading these\n * out of a matrix is either error-prone or can incur a big payload for little benefit.\n */\n\n\n HTMLVisualElement.prototype.readNativeValue = function (key) {\n if (isTransformProp(key)) {\n var defaultValueType = getDefaultValueType(key);\n return defaultValueType ? defaultValueType.default || 0 : 0;\n } else {\n return this.read(key);\n }\n };\n /**\n * Ensure that HTML and Framer-specific value types like `px`->`%` and `Color`\n * can be animated by Motion.\n */\n\n\n HTMLVisualElement.prototype.makeTargetAnimatable = function (_a, parseDOMValues) {\n if (parseDOMValues === void 0) {\n parseDOMValues = true;\n }\n\n var transition = _a.transition,\n transitionEnd = _a.transitionEnd,\n target = __rest(_a, [\"transition\", \"transitionEnd\"]);\n\n var transformValues = this.config.transformValues;\n var origin = getOrigin(target, transition || {}, this);\n /**\n * If Framer has provided a function to convert `Color` etc value types, convert them\n */\n\n if (transformValues) {\n if (transitionEnd) transitionEnd = transformValues(transitionEnd);\n if (target) target = transformValues(target);\n if (origin) origin = transformValues(origin);\n }\n\n if (parseDOMValues) {\n checkTargetForNewValues(this, target, origin);\n var parsed = parseDomVariant(this, target, origin, transitionEnd);\n transitionEnd = parsed.transitionEnd;\n target = parsed.target;\n }\n\n return __assign({\n transition: transition,\n transitionEnd: transitionEnd\n }, target);\n };\n\n HTMLVisualElement.prototype.enableLayoutProjection = function () {\n this.isLayoutProjectionEnabled = true;\n };\n\n HTMLVisualElement.prototype.hide = function () {\n if (this.isVisible === false) return;\n this.isVisible = false;\n this.scheduleRender();\n };\n\n HTMLVisualElement.prototype.show = function () {\n if (this.isVisible === true) return;\n this.isVisible = true;\n this.scheduleRender();\n };\n /**\n * Register an event listener to fire when the layout is updated. We might want to expose support\n * for this via a `motion` prop.\n */\n\n\n HTMLVisualElement.prototype.onLayoutUpdate = function (callback) {\n return this.layoutUpdateListeners.add(callback);\n };\n\n HTMLVisualElement.prototype.onLayoutMeasure = function (callback) {\n return this.layoutMeasureListeners.add(callback);\n };\n\n HTMLVisualElement.prototype.onViewportBoxUpdate = function (callback) {\n return this.viewportBoxUpdateListeners.add(callback);\n };\n /**\n * To be called when all layouts are successfully updated. In turn we can notify layoutUpdate\n * subscribers.\n */\n\n\n HTMLVisualElement.prototype.layoutReady = function (config) {\n this.layoutUpdateListeners.notify(this.box, this.prevViewportBox || this.box, config);\n };\n /**\n * Measure and return the Element's bounding box. We convert it to a AxisBox2D\n * structure to make it easier to work on each individual axis generically.\n */\n\n\n HTMLVisualElement.prototype.getBoundingBox = function () {\n var transformPagePoint = this.config.transformPagePoint;\n return getBoundingBox(this.element, transformPagePoint);\n };\n\n HTMLVisualElement.prototype.getBoundingBoxWithoutTransforms = function () {\n var bbox = this.getBoundingBox();\n removeBoxTransforms(bbox, this.latest);\n return bbox;\n };\n /**\n * Return the computed style after a render.\n */\n\n\n HTMLVisualElement.prototype.getComputedStyle = function () {\n return window.getComputedStyle(this.element);\n };\n /**\n * Record the bounding box as it exists before a re-render.\n */\n\n\n HTMLVisualElement.prototype.snapshotBoundingBox = function () {\n this.prevViewportBox = this.getBoundingBoxWithoutTransforms();\n /**\n * Update targetBox to match the prevViewportBox. This is just to ensure\n * that targetBox is affected by scroll in the same way as the measured box\n */\n\n this.rebaseTargetBox(false, this.prevViewportBox);\n };\n\n HTMLVisualElement.prototype.rebaseTargetBox = function (force, box) {\n var _this = this;\n\n if (force === void 0) {\n force = false;\n }\n\n if (box === void 0) {\n box = this.box;\n }\n\n var _a = this.axisProgress,\n x = _a.x,\n y = _a.y;\n var shouldRebase = this.box && !this.isTargetBoxLocked && !x.isAnimating() && !y.isAnimating();\n\n if (force || shouldRebase) {\n eachAxis(function (axis) {\n var _a = box[axis],\n min = _a.min,\n max = _a.max;\n\n _this.setAxisTarget(axis, min, max);\n });\n }\n };\n\n HTMLVisualElement.prototype.measureLayout = function () {\n var _this = this;\n\n this.box = this.getBoundingBox();\n this.boxCorrected = copyAxisBox(this.box);\n if (!this.targetBox) this.targetBox = copyAxisBox(this.box);\n this.layoutMeasureListeners.notify(this.box, this.prevViewportBox || this.box);\n sync.update(function () {\n return _this.rebaseTargetBox();\n });\n };\n\n HTMLVisualElement.prototype.lockTargetBox = function () {\n this.isTargetBoxLocked = true;\n };\n\n HTMLVisualElement.prototype.unlockTargetBox = function () {\n this.stopLayoutAnimation();\n this.isTargetBoxLocked = false;\n };\n /**\n * Reset the transform on the current Element. This is called as part\n * of a batched process across the entire layout tree. To remove this write\n * cycle it'd be interesting to see if it's possible to \"undo\" all the current\n * layout transforms up the tree in the same way this.getBoundingBoxWithoutTransforms\n * works\n */\n\n\n HTMLVisualElement.prototype.resetTransform = function () {\n var transformTemplate = this.config.transformTemplate;\n this.element.style.transform = transformTemplate ? transformTemplate({}, \"\") : \"none\"; // Ensure that whatever happens next, we restore our transform\n\n this.scheduleRender();\n };\n /**\n * Set new min/max boundaries to project an axis into\n */\n\n\n HTMLVisualElement.prototype.setAxisTarget = function (axis, min, max) {\n var targetAxis = this.targetBox[axis];\n targetAxis.min = min;\n targetAxis.max = max; // Flag that we want to fire the onViewportBoxUpdate event handler\n\n this.hasViewportBoxUpdated = true;\n this.rootParent.scheduleUpdateLayoutDelta();\n };\n /**\n *\n */\n\n\n HTMLVisualElement.prototype.startLayoutAxisAnimation = function (axis, transition) {\n var _this = this;\n\n var _a;\n\n var progress = this.axisProgress[axis];\n var _b = this.targetBox[axis],\n min = _b.min,\n max = _b.max;\n var length = max - min;\n progress.clearListeners();\n progress.set(min);\n progress.set(min); // Set twice to hard-reset velocity\n\n progress.onChange(function (v) {\n return _this.setAxisTarget(axis, v, v + length);\n });\n return (_a = this.animateMotionValue) === null || _a === void 0 ? void 0 : _a.call(this, axis, progress, 0, transition);\n };\n\n HTMLVisualElement.prototype.stopLayoutAnimation = function () {\n var _this = this;\n\n eachAxis(function (axis) {\n return _this.axisProgress[axis].stop();\n });\n };\n /**\n * Update the layout deltas to reflect the relative positions of the layout\n * and the desired target box\n */\n\n\n HTMLVisualElement.prototype.updateLayoutDeltas = function () {\n /**\n * Reset the corrected box with the latest values from box, as we're then going\n * to perform mutative operations on it.\n */\n resetBox(this.boxCorrected, this.box);\n /**\n * If this component has a parent, update this treeScale by incorporating the parent's\n * delta into its treeScale.\n */\n\n if (this.parent) {\n this.prevTreeScale.x = this.treeScale.x;\n this.prevTreeScale.y = this.treeScale.y;\n updateTreeScale(this.treeScale, this.parent.treeScale, this.parent.delta);\n }\n /**\n * Apply all the parent deltas to this box to produce the corrected box. This\n * is the layout box, as it will appear on screen as a result of the transforms of its parents.\n */\n\n\n applyTreeDeltas(this.boxCorrected, this.treePath);\n /**\n * Update the delta between the corrected box and the target box before user-set transforms were applied.\n * This will allow us to calculate the corrected borderRadius and boxShadow to compensate\n * for our layout reprojection, but still allow them to be scaled correctly by the user.\n * It might be that to simplify this we may want to accept that user-set scale is also corrected\n * and we wouldn't have to keep and calc both deltas, OR we could support a user setting\n * to allow people to choose whether these styles are corrected based on just the\n * layout reprojection or the final bounding box.\n */\n\n updateBoxDelta(this.delta, this.boxCorrected, this.targetBox, this.layoutOrigin);\n /**\n * If we have a listener for the viewport box, fire it.\n */\n\n this.hasViewportBoxUpdated && this.viewportBoxUpdateListeners.notify(this.targetBox, this.delta);\n this.hasViewportBoxUpdated = false;\n /**\n * Ensure this element renders on the next frame if the projection transform has changed.\n */\n\n var deltaTransform = buildLayoutProjectionTransform(this.delta, this.treeScale);\n\n if (deltaTransform !== this.deltaTransform || // Also compare calculated treeScale, for values that rely on only this for scale correction.\n this.prevTreeScale.x !== this.treeScale.x || this.prevTreeScale.y !== this.treeScale.y) {\n this.scheduleRender();\n }\n\n this.deltaTransform = deltaTransform;\n };\n\n HTMLVisualElement.prototype.updateTransformDeltas = function () {\n if (!this.isLayoutProjectionEnabled || !this.box) return;\n /**\n * Apply the latest user-set transforms to the targetBox to produce the targetBoxFinal.\n * This is the final box that we will then project into by calculating a transform delta and\n * applying it to the corrected box.\n */\n\n applyBoxTransforms(this.targetBoxFinal, this.targetBox, this.latest);\n /**\n * Update the delta between the corrected box and the final target box, after\n * user-set transforms are applied to it. This will be used by the renderer to\n * create a transform style that will reproject the element from its actual layout\n * into the desired bounding box.\n */\n\n updateBoxDelta(this.deltaFinal, this.boxCorrected, this.targetBoxFinal, this.layoutOrigin);\n };\n /**\n * ========================================\n * Build & render\n * ========================================\n */\n\n /**\n * Build a style prop using the latest resolved MotionValues\n */\n\n\n HTMLVisualElement.prototype.build = function () {\n this.updateTransformDeltas();\n\n if (this.isVisible !== undefined) {\n this.style.visibility = this.isVisible ? \"visible\" : \"hidden\";\n }\n\n buildHTMLStyles(this.latest, this.style, this.vars, this.transform, this.transformOrigin, this.transformKeys, this.config, this.isLayoutProjectionEnabled && !!this.box, this.delta, this.deltaFinal, this.treeScale, this.targetBoxFinal);\n };\n /**\n * Render the Element by rebuilding and applying the latest styles and vars.\n */\n\n\n HTMLVisualElement.prototype.render = function () {\n // Rebuild the latest animated values into style and vars caches.\n this.build(); // Directly assign style into the Element's style prop. In tests Object.assign is the\n // fastest way to assign styles.\n\n Object.assign(this.element.style, this.style); // Loop over any CSS variables and assign those.\n\n for (var key in this.vars) {\n this.element.style.setProperty(key, this.vars[key]);\n }\n };\n\n return HTMLVisualElement;\n}(VisualElement);\n/**\n * Pre-bound version of updateLayoutDelta so we're not creating a new function multiple\n * times per frame.\n */\n\n\nvar fireUpdateLayoutDelta = function fireUpdateLayoutDelta(child) {\n return child.updateLayoutDelta();\n};\n/**\n * Creates a constant value over the lifecycle of a component.\n *\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\n * you can ensure that initialisers don't execute twice or more.\n */\n\n\nfunction useConstant(init) {\n var ref = useRef(null);\n\n if (ref.current === null) {\n ref.current = init();\n }\n\n return ref.current;\n}\n\nfunction calcOrigin$1(origin, offset, size) {\n return typeof origin === \"string\" ? origin : px.transform(offset + size * origin);\n}\n/**\n * The SVG transform origin defaults are different to CSS and is less intuitive,\n * so we use the measured dimensions of the SVG to reconcile these.\n */\n\n\nfunction calcSVGTransformOrigin(dimensions, originX, originY) {\n var pxOriginX = calcOrigin$1(originX, dimensions.x, dimensions.width);\n var pxOriginY = calcOrigin$1(originY, dimensions.y, dimensions.height);\n return pxOriginX + \" \" + pxOriginY;\n} // Convert a progress 0-1 to a pixels value based on the provided length\n\n\nvar progressToPixels = function progressToPixels(progress, length) {\n return px.transform(progress * length);\n};\n\nvar dashKeys = {\n offset: \"stroke-dashoffset\",\n array: \"stroke-dasharray\"\n};\nvar camelKeys = {\n offset: \"strokeDashoffset\",\n array: \"strokeDasharray\"\n};\n/**\n * Build SVG path properties. Uses the path's measured length to convert\n * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset\n * and stroke-dasharray attributes.\n *\n * This function is mutative to reduce per-frame GC.\n */\n\nfunction buildSVGPath(attrs, totalLength, length, spacing, offset, useDashCase) {\n if (spacing === void 0) {\n spacing = 1;\n }\n\n if (offset === void 0) {\n offset = 0;\n }\n\n if (useDashCase === void 0) {\n useDashCase = true;\n } // We use dash case when setting attributes directly to the DOM node and camel case\n // when defining props on a React component.\n\n\n var keys = useDashCase ? dashKeys : camelKeys; // Build the dash offset\n\n attrs[keys.offset] = progressToPixels(-offset, totalLength); // Build the dash array\n\n var pathLength = progressToPixels(length, totalLength);\n var pathSpacing = progressToPixels(spacing, totalLength);\n attrs[keys.array] = pathLength + \" \" + pathSpacing;\n}\n\nvar unmeasured = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n};\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\n\nfunction buildSVGAttrs(_a, style, vars, attrs, transform, transformOrigin, transformKeys, config, dimensions, totalPathLength, isLayoutProjectionEnabled, delta, deltaFinal, treeScale, targetBox) {\n var attrX = _a.attrX,\n attrY = _a.attrY,\n originX = _a.originX,\n originY = _a.originY,\n pathLength = _a.pathLength,\n _b = _a.pathSpacing,\n pathSpacing = _b === void 0 ? 1 : _b,\n _c = _a.pathOffset,\n pathOffset = _c === void 0 ? 0 : _c,\n // This is object creation, which we try to avoid per-frame.\n latest = __rest(_a, [\"attrX\", \"attrY\", \"originX\", \"originY\", \"pathLength\", \"pathSpacing\", \"pathOffset\"]);\n /**\n * With SVG we treat all animated values as attributes rather than CSS, so we build into attrs\n */\n\n\n buildHTMLStyles(latest, attrs, vars, transform, transformOrigin, transformKeys, config, isLayoutProjectionEnabled, delta, deltaFinal, treeScale, targetBox);\n /**\n * However, we apply transforms as CSS transforms. So if we detect a transform we take it from attrs\n * and copy it into style.\n */\n\n if (attrs.transform) {\n style.transform = attrs.transform;\n delete attrs.transform;\n } // Parse transformOrigin\n\n\n if (originX !== undefined || originY !== undefined || style.transform) {\n style.transformOrigin = calcSVGTransformOrigin(dimensions || unmeasured, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5);\n } // Treat x/y not as shortcuts but as actual attributes\n\n\n if (attrX !== undefined) attrs.x = attrX;\n if (attrY !== undefined) attrs.y = attrY; // Build SVG path if one has been measured\n\n if (totalPathLength !== undefined && pathLength !== undefined) {\n buildSVGPath(attrs, totalPathLength, pathLength, pathSpacing, pathOffset, false);\n }\n\n return attrs;\n}\n/**\n * A set of attribute names that are always read/written as camel case.\n */\n\n\nvar camelCaseAttributes = new Set([\"baseFrequency\", \"diffuseConstant\", \"kernelMatrix\", \"kernelUnitLength\", \"keySplines\", \"keyTimes\", \"limitingConeAngle\", \"markerHeight\", \"markerWidth\", \"numOctaves\", \"targetX\", \"targetY\", \"surfaceScale\", \"specularConstant\", \"specularExponent\", \"stdDeviation\", \"tableValues\", \"viewBox\"]);\nvar CAMEL_CASE_PATTERN = /([a-z])([A-Z])/g;\nvar REPLACE_TEMPLATE = \"$1-$2\";\n/**\n * Convert camelCase to dash-case properties.\n */\n\nvar camelToDash = function camelToDash(str) {\n return str.replace(CAMEL_CASE_PATTERN, REPLACE_TEMPLATE).toLowerCase();\n};\n/**\n * A VisualElement for SVGElements. Inherits from and extends HTMLVisualElement as the two\n * share data structures.\n */\n\n\nvar SVGVisualElement =\n/** @class */\nfunction (_super) {\n __extends(SVGVisualElement, _super);\n\n function SVGVisualElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * A mutable record of attributes we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n\n _this.attrs = {};\n /**\n * We disable hardware acceleration for SVG transforms as they're not currently able to be accelerated.\n */\n\n _this.defaultConfig = {\n enableHardwareAcceleration: false\n };\n /**\n * Without duplicating this call from HTMLVisualElement we end up with HTMLVisualElement.defaultConfig\n * being assigned to config\n */\n\n _this.config = _this.defaultConfig;\n return _this;\n }\n /**\n * Measure the SVG element on mount. This can affect page rendering so there might be a\n * better time to perform this - for instance dynamically only if there's a transform-origin dependent\n * transform being set (like rotate)\n */\n\n\n SVGVisualElement.prototype.mount = function (element) {\n _super.prototype.mount.call(this, element);\n\n this.measure();\n };\n /**\n * Update the SVG dimensions and path length\n */\n\n\n SVGVisualElement.prototype.measure = function () {\n try {\n this.dimensions = typeof this.element.getBBox === \"function\" ? this.element.getBBox() : this.element.getBoundingClientRect();\n } catch (e) {\n // Most likely trying to measure an unrendered element under Firefox\n this.dimensions = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n if (isPath(this.element)) {\n this.totalPathLength = this.element.getTotalLength();\n }\n };\n /**\n * Empty the mutable data structures in case attrs have been removed between renders.\n */\n\n\n SVGVisualElement.prototype.clean = function () {\n _super.prototype.clean.call(this);\n\n this.attrs = {};\n };\n /**\n * Read an attribute directly from the SVGElement\n */\n\n\n SVGVisualElement.prototype.read = function (key) {\n key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n return this.element.getAttribute(key);\n };\n\n SVGVisualElement.prototype.build = function () {\n this.updateTransformDeltas();\n buildSVGAttrs(this.latest, this.style, this.vars, this.attrs, this.transform, this.transformOrigin, this.transformKeys, this.config, this.dimensions, this.totalPathLength, this.isLayoutProjectionEnabled && !!this.box, this.delta, this.deltaFinal, this.treeScale, this.targetBoxFinal);\n };\n\n SVGVisualElement.prototype.render = function () {\n // Update HTML styles and CSS variables\n _super.prototype.render.call(this); // Loop through attributes and apply them to the SVGElement\n\n\n for (var key in this.attrs) {\n this.element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, this.attrs[key]);\n }\n };\n\n return SVGVisualElement;\n}(HTMLVisualElement);\n\nfunction isPath(element) {\n return element.tagName === \"path\";\n}\n/**\n * @internal\n */\n\n/**\n * @internal\n */\n\n\nvar svgElements = [\"animate\", \"circle\", \"clipPath\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"foreignObject\", \"g\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\", \"stop\", \"svg\", \"switch\", \"symbol\", \"text\", \"textPath\", \"tspan\", \"use\", \"view\"];\nvar svgTagNames = new Set(svgElements);\n/**\n * Determine whether this is a HTML or SVG component based on if the provided\n * Component is a string and a recognised SVG tag. A potentially better way to\n * do this would be to offer a `motion.customSVG` function and determine this\n * when we generate the `motion.circle` etc components.\n */\n\nfunction isSVGComponent(Component) {\n return typeof Component === \"string\" && svgTagNames.has(Component);\n}\n/**\n * @public\n */\n\n\nvar PresenceContext = createContext(null);\nvar MotionContext = createContext({\n variantContext: {}\n});\n\nfunction useVariantContext() {\n return useContext(MotionContext).variantContext;\n}\n\nfunction useVisualElementContext() {\n return useContext(MotionContext).visualElement;\n}\n/**\n * DOM-flavoured variation of the useVisualElement hook. Used to create either a HTMLVisualElement\n * or SVGVisualElement for the component.\n *\n */\n\n\nvar useDomVisualElement = function useDomVisualElement(Component, props, isStatic, ref) {\n var parent = useVisualElementContext();\n var visualElement = useConstant(function () {\n var DOMVisualElement = isSVGComponent(Component) ? SVGVisualElement : HTMLVisualElement;\n return new DOMVisualElement(parent, ref);\n });\n visualElement.updateConfig(__assign(__assign(__assign({}, visualElement.config), {\n enableHardwareAcceleration: !isStatic\n }), props));\n visualElement.layoutId = props.layoutId;\n var presenceContext = useContext(PresenceContext);\n /**\n * Update VisualElement with presence data.\n */\n\n var isPresent = presenceContext === null ? true : presenceContext.isPresent;\n visualElement.isPresent = props.isPresent !== undefined ? props.isPresent : isPresent;\n /**\n *\n */\n\n var presenceId = presenceContext === null || presenceContext === void 0 ? void 0 : presenceContext.id;\n visualElement.isPresenceRoot = !parent || parent.presenceId !== presenceId;\n /**\n * TODO: Investigate if we need this\n */\n\n useEffect(function () {\n if (props.onViewportBoxUpdate) {\n return visualElement.onViewportBoxUpdate(props.onViewportBoxUpdate);\n }\n }, [props.onViewportBoxUpdate]);\n return visualElement;\n};\n/**\n * A list of all valid MotionProps.\n *\n * @internalremarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\n\n\nvar validMotionProps = new Set([\"initial\", \"animate\", \"exit\", \"style\", \"variants\", \"transition\", \"transformTemplate\", \"transformValues\", \"custom\", \"inherit\", \"layout\", \"layoutId\", \"onLayoutAnimationComplete\", \"onViewportBoxUpdate\", \"onAnimationStart\", \"onAnimationComplete\", \"onUpdate\", \"onDragStart\", \"onDrag\", \"onDragEnd\", \"onMeasureDragConstraints\", \"onDirectionLock\", \"onDragTransitionEnd\", \"drag\", \"dragControls\", \"dragListener\", \"dragConstraints\", \"dragDirectionLock\", \"_dragX\", \"_dragY\", \"dragElastic\", \"dragMomentum\", \"dragPropagation\", \"dragTransition\", \"onPan\", \"onPanStart\", \"onPanEnd\", \"onPanSessionStart\", \"onTap\", \"onTapStart\", \"onTapCancel\", \"whileHover\", \"whileTap\", \"onHoverEnd\", \"onHoverStart\"]);\n/**\n * Check whether a prop name is a valid `MotionProp` key.\n *\n * @param key - Name of the property to check\n * @returns `true` is key is a valid `MotionProp`.\n *\n * @public\n */\n\nfunction isValidMotionProp(key) {\n return validMotionProps.has(key);\n}\n\nvar isPropValid = function isPropValid(key) {\n return !isValidMotionProp(key);\n};\n/**\n * Emotion and Styled Components both allow users to pass through arbitrary props to their components\n * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which\n * of these should be passed to the underlying DOM node.\n *\n * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props\n * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props\n * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of\n * `@emotion/is-prop-valid`, however to fix this problem we need to use it.\n *\n * By making it an optionalDependency we can offer this functionality only in the situations where it's\n * actually required.\n */\n\n\ntry {\n var emotionIsPropValid_1 = require(\"@emotion/is-prop-valid\").default;\n\n isPropValid = function isPropValid(key) {\n // Handle events explicitly as Emotion validates them all as true\n if (key.startsWith(\"on\")) {\n return !isValidMotionProp(key);\n } else {\n return emotionIsPropValid_1(key);\n }\n };\n} catch (_a) {// We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\n\nfunction filterProps(props) {\n var domProps = {};\n\n for (var key in props) {\n if (isPropValid(key)) domProps[key] = props[key];\n }\n\n return domProps;\n}\n\nfunction buildHTMLProps(visualElement, _a) {\n var drag = _a.drag; // The `any` isn't ideal but it is the type of createElement props argument\n\n var htmlProps = {\n style: __assign(__assign(__assign({}, visualElement.reactStyle), visualElement.style), visualElement.vars)\n };\n\n if (!!drag) {\n // Disable the ghost element when a user drags\n htmlProps.draggable = false; // Disable text selection\n\n htmlProps.style.userSelect = \"none\"; // Disable scrolling on the draggable direction\n\n htmlProps.style.touchAction = drag === true ? \"none\" : \"pan-\" + (drag === \"x\" ? \"y\" : \"x\");\n }\n\n return htmlProps;\n}\n/**\n * Build React props for SVG elements\n */\n\n\nfunction buildSVGProps(visualElement) {\n return __assign(__assign({}, visualElement.attrs), {\n style: __assign({}, visualElement.reactStyle)\n });\n}\n\nfunction render(Component, props, visualElement) {\n // Only filter props from components we control, ie `motion.div`. If this\n // is a custom component pass along everything provided to it.\n var forwardedProps = typeof Component === \"string\" ? filterProps(props) : props;\n /**\n * Every render, empty and rebuild the animated values to be applied to our Element.\n * During animation these data structures are used in a mutable fashion to reduce\n * garbage collection, but between renders we can flush them to remove values\n * that might have been taken out of the provided props.\n */\n\n visualElement.clean();\n visualElement.build(); // Generate props to visually render this component\n\n var visualProps = isSVGComponent(Component) ? buildSVGProps(visualElement) : buildHTMLProps(visualElement, props);\n return createElement(Component, __assign(__assign(__assign({}, forwardedProps), {\n ref: visualElement.ref\n }), visualProps));\n}\n\nvar isMotionValue = function isMotionValue(value) {\n return value instanceof MotionValue;\n};\n\nfunction isForcedMotionValue(key, _a) {\n var layout = _a.layout,\n layoutId = _a.layoutId;\n return isTransformProp(key) || isTransformOriginProp(key) || (layout || layoutId !== undefined) && !!valueScaleCorrection[key];\n}\n/**\n * Scrape props for MotionValues and add/remove them to this component's\n * VisualElement\n */\n\n\nfunction useMotionValues(visualElement, props) {\n var prev = useConstant(empty);\n /**\n * Remove MotionValues that are no longer present\n */\n\n for (var key in prev) {\n var isForced = isForcedMotionValue(key, props);\n var existsAsProp = props[key] !== undefined;\n var existsAsStyle = props.style && props.style[key] !== undefined;\n var propIsMotionValue = existsAsProp && isMotionValue(props[key]);\n var styleIsMotionValue = existsAsStyle && isMotionValue(props.style[key]);\n var transformRemoved = isForced && !existsAsProp && !existsAsStyle;\n var motionValueRemoved = !isForced && !propIsMotionValue && !styleIsMotionValue;\n\n if (transformRemoved || motionValueRemoved) {\n visualElement.removeValue(key);\n delete prev[key];\n }\n }\n /**\n * Add incoming MotionValues\n */\n\n\n addMotionValues(visualElement, prev, props, false, props);\n if (props.style) addMotionValues(visualElement, prev, props.style, true, props);\n /**\n * Transform custom values if provided a handler, ie size -> width/height\n * Ideally we'd ditch this by removing support for size and other custom values from Framer.\n */\n\n if (props.transformValues) {\n visualElement.reactStyle = props.transformValues(visualElement.reactStyle);\n }\n}\n/**\n * Add incoming MotionValues\n *\n * TODO: Type the VisualElements properly\n */\n\n\nfunction addMotionValues(visualElement, prev, source, isStyle, props) {\n if (isStyle === void 0) {\n isStyle = false;\n }\n\n if (isStyle) visualElement.reactStyle = {};\n\n for (var key in source) {\n var value = source[key];\n var foundMotionValue = false;\n\n if (isMotionValue(value)) {\n // If this is a MotionValue, add it if it isn't a reserved key\n if (!reservedNames.has(key)) {\n visualElement.addValue(key, value);\n foundMotionValue = true;\n }\n } else if (isForcedMotionValue(key, props)) {\n // If this is a transform prop, always create a MotionValue\n // to ensure we can reconcile them all together.\n if (!visualElement.hasValue(key)) {\n visualElement.addValue(key, motionValue(value));\n } else if (value !== prev[key]) {\n if (isMotionValue(prev[key])) {\n /**\n * If the previous value was a MotionValue, and this value isn't,\n * we want to create a new MotionValue rather than update one that's been removed.\n */\n visualElement.addValue(key, motionValue(value));\n } else {\n /**\n * Otherwise, we just want to ensure the MotionValue is of the latest value.\n */\n var motion = visualElement.getValue(key);\n motion.set(value);\n }\n }\n\n foundMotionValue = true;\n } else if (isStyle) {\n visualElement.reactStyle[key] = value;\n }\n\n if (foundMotionValue) prev[key] = value;\n }\n}\n/**\n * These are props we accept as MotionValues but don't want to add\n * to the VisualElement\n */\n\n\nvar reservedNames = new Set([]);\n\nvar empty = function empty() {\n return {};\n};\n/**\n * @public\n */\n\n\nvar MotionConfigContext = createContext({\n transformPagePoint: function transformPagePoint(p) {\n return p;\n },\n features: [],\n isStatic: false\n});\n/**\n * MotionConfig can be used in combination with the `m` component to cut bundle size\n * and dynamically load only the features you use.\n *\n * ```jsx\n * import {\n * m as motion,\n * AnimationFeature,\n * MotionConfig\n * } from \"framer-motion\"\n *\n * export function App() {\n * return (\n * \n * \n * \n * )\n * }\n * ```\n *\n * @public\n */\n\nfunction MotionConfig(_a) {\n var children = _a.children,\n _b = _a.features,\n features = _b === void 0 ? [] : _b,\n props = __rest(_a, [\"children\", \"features\"]);\n\n var pluginContext = useContext(MotionConfigContext);\n\n var loadedFeatures = __spread(pluginContext.features, features); // We do want to rerender children when the number of loaded features changes\n\n\n var value = useMemo(function () {\n return {\n features: loadedFeatures\n };\n }, [loadedFeatures.length]); // Mutative to prevent triggering rerenders in all listening\n // components every time this component renders\n\n for (var key in props) {\n value[key] = props[key];\n }\n\n return createElement(MotionConfigContext.Provider, {\n value: value\n }, children);\n}\n\nfunction checkShouldInheritVariant(_a) {\n var animate = _a.animate,\n variants = _a.variants,\n inherit = _a.inherit;\n return inherit === undefined ? !!variants && !animate : inherit;\n}\n/**\n * Load features via renderless components based on the provided MotionProps\n */\n\n\nfunction useFeatures(defaultFeatures, isStatic, visualElement, props) {\n var plugins = useContext(MotionConfigContext); // If this is a static component, or we're rendering on the server, we don't load\n // any feature components\n\n if (isStatic || typeof window === \"undefined\") return null;\n\n var allFeatures = __spread(defaultFeatures, plugins.features);\n\n var numFeatures = allFeatures.length;\n var features = []; // Decide which features we should render and add them to the returned array\n\n for (var i = 0; i < numFeatures; i++) {\n var _a = allFeatures[i],\n shouldRender = _a.shouldRender,\n key = _a.key,\n getComponent = _a.getComponent;\n\n if (shouldRender(props)) {\n var Component = getComponent(props);\n Component && features.push(createElement(Component, __assign({\n key: key\n }, props, {\n visualElement: visualElement,\n inherit: checkShouldInheritVariant(props)\n })));\n }\n }\n\n return features;\n}\n\nvar Presence;\n\n(function (Presence) {\n Presence[Presence[\"Entering\"] = 0] = \"Entering\";\n Presence[Presence[\"Present\"] = 1] = \"Present\";\n Presence[Presence[\"Exiting\"] = 2] = \"Exiting\";\n})(Presence || (Presence = {}));\n\nvar VisibilityAction;\n\n(function (VisibilityAction) {\n VisibilityAction[VisibilityAction[\"Hide\"] = 0] = \"Hide\";\n VisibilityAction[VisibilityAction[\"Show\"] = 1] = \"Show\";\n})(VisibilityAction || (VisibilityAction = {}));\n/**\n * Default handlers for batching VisualElements\n */\n\n\nvar defaultHandler = {\n measureLayout: function measureLayout(child) {\n return child.measureLayout();\n },\n layoutReady: function layoutReady(child) {\n return child.layoutReady();\n }\n};\n/**\n * Sort VisualElements by tree depth, so we process the highest elements first.\n */\n\nvar sortByDepth = function sortByDepth(a, b) {\n return a.depth - b.depth;\n};\n/**\n * Create a batcher to process VisualElements\n */\n\n\nfunction createBatcher() {\n var queue = new Set();\n\n var add = function add(child) {\n return queue.add(child);\n };\n\n var flush = function flush(_a) {\n var _b = _a === void 0 ? defaultHandler : _a,\n measureLayout = _b.measureLayout,\n layoutReady = _b.layoutReady;\n\n var order = Array.from(queue).sort(sortByDepth);\n /**\n * Write: Reset any transforms on children elements so we can read their actual layout\n */\n\n order.forEach(function (child) {\n return child.resetTransform();\n });\n /**\n * Read: Measure the actual layout\n */\n\n order.forEach(measureLayout);\n /**\n * Write: Notify the VisualElements they're ready for further write operations.\n */\n\n order.forEach(layoutReady);\n /**\n * After all children have started animating, ensure any Entering components are set to Present.\n * If we add deferred animations (set up all animations and then start them in two loops) this\n * could be moved to the start loop. But it needs to happen after all the animations configs\n * are generated in AnimateSharedLayout as this relies on presence data\n */\n\n order.forEach(function (child) {\n if (child.isPresent) child.presence = Presence.Present;\n });\n queue.clear();\n };\n\n return {\n add: add,\n flush: flush\n };\n}\n\nfunction isSharedLayout(context) {\n return !!context.forceUpdate;\n}\n\nvar SharedLayoutContext = createContext(createBatcher());\nvar isBrowser = typeof window !== \"undefined\";\nvar useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nfunction useSnapshotOnUnmount(visualElement) {\n var syncLayout = useContext(SharedLayoutContext);\n useIsomorphicLayoutEffect(function () {\n return function () {\n if (isSharedLayout(syncLayout)) {\n syncLayout.remove(visualElement);\n }\n };\n }, []);\n}\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n * const [isPresent, safeToRemove] = usePresence()\n *\n * useEffect(() => {\n * !isPresent && setTimeout(safeToRemove, 1000)\n * }, [isPresent])\n *\n * return
\n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed the tree, but\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\n\n\nfunction usePresence() {\n var context = useContext(PresenceContext);\n if (context === null) return [true, null];\n var isPresent = context.isPresent,\n onExitComplete = context.onExitComplete,\n register = context.register; // It's safe to call the following hooks conditionally (after an early return) because the context will always\n // either be null or non-null for the lifespan of the component.\n // Replace with useOpaqueId when released in React\n\n var id = useUniqueId();\n useEffect(function () {\n return register(id);\n }, []);\n\n var safeToRemove = function safeToRemove() {\n return onExitComplete === null || onExitComplete === void 0 ? void 0 : onExitComplete(id);\n };\n\n return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n * const isPresent = useIsPresent()\n *\n * useEffect(() => {\n * !isPresent && console.log(\"I've been removed!\")\n * }, [isPresent])\n *\n * return
\n * }\n * ```\n *\n * @public\n */\n\n\nfunction useIsPresent() {\n return isPresent(useContext(PresenceContext));\n}\n\nfunction isPresent(context) {\n return context === null ? true : context.isPresent;\n}\n\nvar counter = 0;\n\nvar incrementId = function incrementId() {\n return counter++;\n};\n\nvar useUniqueId = function useUniqueId() {\n return useConstant(incrementId);\n};\n/**\n * Use callback either only on the initial render or on all renders. In concurrent mode\n * the \"initial\" render might run multiple times\n *\n * @param callback - Callback to run\n * @param isInitialOnly - Set to `true` to only run on initial render, or `false` for all renders. Defaults to `false`.\n *\n * @public\n */\n\n\nfunction useInitialOrEveryRender(callback, isInitialOnly) {\n if (isInitialOnly === void 0) {\n isInitialOnly = false;\n }\n\n var isInitialRender = useRef(true);\n\n if (!isInitialOnly || isInitialOnly && isInitialRender.current) {\n callback();\n }\n\n isInitialRender.current = false;\n}\n/**\n * This hook is resonsible for creating the variant-propagation tree\n * relationship between VisualElements.\n */\n\n\nfunction useVariants(visualElement, _a, isStatic) {\n var _b, _c;\n\n var variants = _a.variants,\n initial = _a.initial,\n animate = _a.animate,\n whileTap = _a.whileTap,\n whileHover = _a.whileHover;\n\n var _d = useVariantContext(),\n parent = _d.parent,\n parentInitial = _d.initial,\n parentAnimate = _d.animate;\n\n var presenceContext = useContext(PresenceContext);\n /**\n * We only add this VisualElement to the variant tree *if* we're:\n * 1. Being provided a variants prop\n * 2. Being used to control variants (ie animate, whileHover etc)\n * 3. Or being passed animation controls, which we have to assume may control variants\n * Otherwise this component should be \"invisible\" to variant propagation. This is a concession\n * to Framer which uses a `motion` component in every `Frame` and it might be if we change that\n * in the future that this restriction is removed.\n */\n\n var controlsVariants = isVariantLabel$1(animate) || isVariantLabel$1(whileTap) || isVariantLabel$1(whileHover) || isAnimationControls(animate);\n var isVariantNode = variants || controlsVariants;\n /**\n * Override initial with one from a parent `AnimatePresence`, if present\n */\n\n initial = (_b = presenceContext === null || presenceContext === void 0 ? void 0 : presenceContext.initial) !== null && _b !== void 0 ? _b : initial;\n /**\n * If initial is false, and animate isn't animation controls, we assign animate\n * to initial and set our values to that for the initial render.\n */\n\n if (initial === false && !isAnimationControls(animate)) {\n initial = animate;\n }\n\n var context = useMemo(function () {\n return {\n parent: isVariantNode ? visualElement : parent,\n initial: isVariantLabel$1(initial) ? initial : parentInitial,\n animate: isVariantLabel$1(animate) ? animate : parentAnimate\n };\n },\n /**\n * Only create a new context value (thereby re-rendering children) if this\n * is a static component and `initial` changes.\n */\n [isStatic ? initial : null]); // Set initial state. If this is a static component (ie in Framer canvas), respond to updates\n // in `initial`.\n\n useInitialOrEveryRender(function () {\n var initialToApply = initial || parentInitial;\n initialToApply && setValues(visualElement, initialToApply);\n }, !isStatic);\n /**\n * Subscribe to the parent visualElement if this is a participant in the variant tree\n */\n\n isVariantNode && !controlsVariants && (parent === null || parent === void 0 ? void 0 : parent.addVariantChild(visualElement));\n /**\n * If this component isn't exiting the tree, clear all the children in the render phase.\n * This will allow children to resubscribe in the correct order to ensure the correct stagger order.\n */\n\n isPresent(presenceContext) && ((_c = visualElement.variantChildrenOrder) === null || _c === void 0 ? void 0 : _c.clear());\n /**\n * Subscribe to the propagated parent.\n */\n\n useEffect(function () {\n isVariantNode && (parent === null || parent === void 0 ? void 0 : parent.addVariantChildOrder(visualElement));\n });\n /**\n * Track mount status so children can detect whether they were present during the\n * component's initial mount.\n */\n\n useEffect(function () {\n visualElement.isMounted = true;\n return function () {\n var _a;\n\n visualElement.isMounted = false;\n (_a = parent === null || parent === void 0 ? void 0 : parent.variantChildren) === null || _a === void 0 ? void 0 : _a.delete(visualElement);\n };\n }, []);\n /**\n * We want to update the \"base\" (or fallback) value on the initial render.\n */\n\n useInitialOrEveryRender(function () {\n visualElement.forEachValue(function (value, key) {\n visualElement.baseTarget[key] = value.get();\n });\n }, true);\n return context;\n}\n\nfunction isVariantLabel$1(v) {\n return typeof v === \"string\" || Array.isArray(v);\n}\n\nfunction isAnimationControls(v) {\n return typeof v === \"object\" && typeof v.start === \"function\";\n}\n/**\n * Create a `motion` component.\n *\n * This function accepts a Component argument, which can be either a string (ie \"div\"\n * for `motion.div`), or an actual React component.\n *\n * Alongside this is a config option which provides a way of rendering the provided\n * component \"offline\", or outside the React render cycle.\n *\n * @internal\n */\n\n\nfunction createMotionComponent(Component, _a) {\n var defaultFeatures = _a.defaultFeatures,\n useVisualElement = _a.useVisualElement,\n render = _a.render;\n\n function MotionComponent(props, externalRef) {\n /**\n * If a component is static, we only visually update it as a\n * result of a React re-render, rather than any interactions or animations.\n * If this component or any ancestor is static, we disable hardware acceleration\n * and don't load any additional functionality.\n */\n var isStatic = useContext(MotionConfigContext).isStatic;\n /**\n * Create a VisualElement for this component. A VisualElement provides a common\n * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as\n * providing a way of rendering to these APIs outside of the React render loop\n * for more performant animations and interactions\n */\n\n var visualElement = useVisualElement(Component, props, isStatic, externalRef);\n /**\n * Scrape MotionValues from props and add/remove them to/from the VisualElement.\n */\n\n useMotionValues(visualElement, props);\n /**\n * Add the visualElement as a node in the variant tree.\n */\n\n var variantContext = useVariants(visualElement, props, isStatic);\n /**\n * Load features as renderless components unless the component isStatic\n */\n\n var features = useFeatures(defaultFeatures, isStatic, visualElement, props);\n /**\n * Only create a new context value when the sub-contexts change.\n */\n\n var context = useMemo(function () {\n return {\n visualElement: visualElement,\n variantContext: variantContext\n };\n }, [visualElement, variantContext]);\n var component = render(Component, props, visualElement);\n /**\n * If this component is a child of AnimateSharedLayout, we need to snapshot the component\n * before it's unmounted. This lives here rather than in features/layout/Measure because\n * as a child component its unmount effect runs after this component has been unmounted.\n */\n\n useSnapshotOnUnmount(visualElement); // The mount order and hierarchy is specific to ensure our element ref is hydrated by the time\n // all plugins and features has to execute.\n\n return createElement(Fragment, null, createElement(MotionContext.Provider, {\n value: context\n }, component), features);\n }\n\n return forwardRef(MotionComponent);\n}\n\nfunction createLock(name) {\n var lock = null;\n return function () {\n var openLock = function openLock() {\n lock = null;\n };\n\n if (lock === null) {\n lock = name;\n return openLock;\n }\n\n return false;\n };\n}\n\nvar globalHorizontalLock = createLock(\"dragHorizontal\");\nvar globalVerticalLock = createLock(\"dragVertical\");\n\nfunction getGlobalLock(drag) {\n var lock = false;\n\n if (drag === \"y\") {\n lock = globalVerticalLock();\n } else if (drag === \"x\") {\n lock = globalHorizontalLock();\n } else {\n var openHorizontal_1 = globalHorizontalLock();\n var openVertical_1 = globalVerticalLock();\n\n if (openHorizontal_1 && openVertical_1) {\n lock = function lock() {\n openHorizontal_1();\n openVertical_1();\n };\n } else {\n // Release the locks because we don't use them\n if (openHorizontal_1) openHorizontal_1();\n if (openVertical_1) openVertical_1();\n }\n }\n\n return lock;\n}\n\nfunction addDomEvent(target, eventName, handler, options) {\n target.addEventListener(eventName, handler, options);\n return function () {\n return target.removeEventListener(eventName, handler, options);\n };\n}\n/**\n * Attaches an event listener directly to the provided DOM element.\n *\n * Bypassing React's event system can be desirable, for instance when attaching non-passive\n * event handlers.\n *\n * ```jsx\n * const ref = useRef(null)\n *\n * useDomEvent(ref, 'wheel', onWheel, { passive: false })\n *\n * return
\n * ```\n *\n * @param ref - React.RefObject that's been provided to the element you want to bind the listener to.\n * @param eventName - Name of the event you want listen for.\n * @param handler - Function to fire when receiving the event.\n * @param options - Options to pass to `Event.addEventListener`.\n *\n * @public\n */\n\n\nfunction useDomEvent(ref, eventName, handler, options) {\n useEffect(function () {\n var element = ref.current;\n\n if (handler && element) {\n return addDomEvent(element, eventName, handler, options);\n }\n }, [ref, eventName, handler, options]);\n}\n\nfunction isMouseEvent(event) {\n // PointerEvent inherits from MouseEvent so we can't use a straight instanceof check.\n if (typeof PointerEvent !== \"undefined\" && event instanceof PointerEvent) {\n return !!(event.pointerType === \"mouse\");\n }\n\n return event instanceof MouseEvent;\n}\n\nfunction isTouchEvent(event) {\n var hasTouches = !!event.touches;\n return hasTouches;\n}\n/**\n * Filters out events not attached to the primary pointer (currently left mouse button)\n * @param eventHandler\n */\n\n\nfunction filterPrimaryPointer(eventHandler) {\n return function (event) {\n var isMouseEvent = event instanceof MouseEvent;\n var isPrimaryPointer = !isMouseEvent || isMouseEvent && event.button === 0;\n\n if (isPrimaryPointer) {\n eventHandler(event);\n }\n };\n}\n\nvar defaultPagePoint = {\n pageX: 0,\n pageY: 0\n};\n\nfunction pointFromTouch(e, pointType) {\n if (pointType === void 0) {\n pointType = \"page\";\n }\n\n var primaryTouch = e.touches[0] || e.changedTouches[0];\n var point = primaryTouch || defaultPagePoint;\n return {\n x: point[pointType + \"X\"],\n y: point[pointType + \"Y\"]\n };\n}\n\nfunction pointFromMouse(point, pointType) {\n if (pointType === void 0) {\n pointType = \"page\";\n }\n\n return {\n x: point[pointType + \"X\"],\n y: point[pointType + \"Y\"]\n };\n}\n\nfunction extractEventInfo(event, pointType) {\n if (pointType === void 0) {\n pointType = \"page\";\n }\n\n return {\n point: isTouchEvent(event) ? pointFromTouch(event, pointType) : pointFromMouse(event, pointType)\n };\n}\n\nfunction getViewportPointFromEvent(event) {\n return extractEventInfo(event, \"client\");\n}\n\nvar wrapHandler = function wrapHandler(handler, shouldFilterPrimaryPointer) {\n if (shouldFilterPrimaryPointer === void 0) {\n shouldFilterPrimaryPointer = false;\n }\n\n var listener = function listener(event) {\n return handler(event, extractEventInfo(event));\n };\n\n return shouldFilterPrimaryPointer ? filterPrimaryPointer(listener) : listener;\n};\n\nvar isBrowser$1 = typeof window !== \"undefined\"; // We check for event support via functions in case they've been mocked by a testing suite.\n\nvar supportsPointerEvents = function supportsPointerEvents() {\n return isBrowser$1 && window.onpointerdown === null;\n};\n\nvar supportsTouchEvents = function supportsTouchEvents() {\n return isBrowser$1 && window.ontouchstart === null;\n};\n\nvar supportsMouseEvents = function supportsMouseEvents() {\n return isBrowser$1 && window.onmousedown === null;\n};\n\nvar mouseEventNames = {\n pointerdown: \"mousedown\",\n pointermove: \"mousemove\",\n pointerup: \"mouseup\",\n pointercancel: \"mousecancel\",\n pointerover: \"mouseover\",\n pointerout: \"mouseout\",\n pointerenter: \"mouseenter\",\n pointerleave: \"mouseleave\"\n};\nvar touchEventNames = {\n pointerdown: \"touchstart\",\n pointermove: \"touchmove\",\n pointerup: \"touchend\",\n pointercancel: \"touchcancel\"\n};\n\nfunction getPointerEventName(name) {\n if (supportsPointerEvents()) {\n return name;\n } else if (supportsTouchEvents()) {\n return touchEventNames[name];\n } else if (supportsMouseEvents()) {\n return mouseEventNames[name];\n }\n\n return name;\n}\n\nfunction addPointerEvent(target, eventName, handler, options) {\n return addDomEvent(target, getPointerEventName(eventName), wrapHandler(handler, eventName === \"pointerdown\"), options);\n}\n\nfunction usePointerEvent(ref, eventName, handler, options) {\n return useDomEvent(ref, getPointerEventName(eventName), handler && wrapHandler(handler, eventName === \"pointerdown\"), options);\n}\n/**\n * @internal\n */\n\n\nvar PanSession =\n/** @class */\nfunction () {\n function PanSession(event, handlers, _a) {\n var _this = this;\n\n var transformPagePoint = (_a === void 0 ? {} : _a).transformPagePoint;\n /**\n * @internal\n */\n\n this.startEvent = null;\n /**\n * @internal\n */\n\n this.lastMoveEvent = null;\n /**\n * @internal\n */\n\n this.lastMoveEventInfo = null;\n /**\n * @internal\n */\n\n this.handlers = {};\n\n this.updatePoint = function () {\n if (!(_this.lastMoveEvent && _this.lastMoveEventInfo)) return;\n var info = getPanInfo(_this.lastMoveEventInfo, _this.history);\n var isPanStarted = _this.startEvent !== null; // Only start panning if the offset is larger than 3 pixels. If we make it\n // any larger than this we'll want to reset the pointer history\n // on the first update to avoid visual snapping to the cursoe.\n\n var isDistancePastThreshold = distance(info.offset, {\n x: 0,\n y: 0\n }) >= 3;\n if (!isPanStarted && !isDistancePastThreshold) return;\n var point = info.point;\n var timestamp = getFrameData().timestamp;\n\n _this.history.push(__assign(__assign({}, point), {\n timestamp: timestamp\n }));\n\n var _a = _this.handlers,\n onStart = _a.onStart,\n onMove = _a.onMove;\n\n if (!isPanStarted) {\n onStart && onStart(_this.lastMoveEvent, info);\n _this.startEvent = _this.lastMoveEvent;\n }\n\n onMove && onMove(_this.lastMoveEvent, info);\n };\n\n this.handlePointerMove = function (event, info) {\n _this.lastMoveEvent = event;\n _this.lastMoveEventInfo = transformPoint(info, _this.transformPagePoint); // Because Safari doesn't trigger mouseup events when it's above a `