{"version":3,"sources":["webpack:///./src/views/pages/product/modules/ImagesGrid.vue","webpack:///./src/views/pages/product/modules/ImagesGrid.vue?f979","webpack:///./src/views/pages/product/modules/ImagesGrid.vue?185e","webpack:///./src/views/pages/product/modules/BundleItems.vue?5af1","webpack:///./src/views/pages/distro/modules/BrandListItem.vue?17d2","webpack:///./src/modules/Watchlist.js","webpack:///./src/views/pages/product/modules/BundleItems.vue","webpack:///./src/views/pages/product/modules/BundleItems.vue?151b","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./src/views/pages/distro/Index.vue","webpack:///./src/views/pages/distro/modules/DistroInfo.vue","webpack:///./src/modules/Distribution.js","webpack:///./src/views/pages/distro/modules/DistroInfo.vue?b85b","webpack:///./src/views/pages/distro/modules/Sorting.vue","webpack:///./src/views/pages/distro/modules/Sorting.vue?87a8","webpack:///./src/views/pages/distro/modules/ProductInfo.vue","webpack:///./src/views/pages/distro/modules/VariantInfo.vue","webpack:///./src/views/pages/distro/modules/ProductRow.vue","webpack:///./src/views/pages/distro/modules/ProductRow.vue?4396","webpack:///./src/views/pages/distro/modules/ProductInfoModal.vue","webpack:///./src/views/pages/distro/modules/ProductInfoModal.vue?bd9f","webpack:///./src/components/loaders/BrandsListLoader.vue","webpack:///./src/components/loaders/BrandsListLoader.vue?3545","webpack:///./src/views/pages/distro/modules/BrandListItem.vue","webpack:///./src/views/pages/distro/modules/BrandListItem.vue?cf4e","webpack:///./src/views/pages/distro/Index.vue?3644","webpack:///./src/views/pages/distro/modules/ProductRow.vue?e81a","webpack:///./src/views/pages/distro/modules/ProductInfoModal.vue?7f47","webpack:///./src/views/pages/distro/modules/Sorting.vue?6437","webpack:///./src/views/pages/distro/modules/DistroInfo.vue?dbdf","webpack:///./node_modules/core-js/modules/es.promise.all-settled.js","webpack:///./src/components/loaders/BrandsListLoader.vue?74ad","webpack:///./node_modules/is-mobile/index.js","webpack:///./src/views/pages/distro/modules/ProductInfoModal.vue?c4e9","webpack:///./node_modules/lottie-web/build/player/lottie.js","webpack:///./src/modules/Product.js","webpack:///./node_modules/core-js/modules/es.array.find-index.js","webpack:///./node_modules/vue3-lottie/dist/vue3-lottie.es.js","webpack:///./src/modules/Notifications.js","webpack:///./node_modules/@headlessui/vue/dist/components/disclosure/disclosure.js","webpack:///./src/views/pages/distro/Index.vue?4f58"],"names":["width","height","viewBox","fill","xmlns","d","class","toggleImages","images","img","idx","key","id","$emit","src","base_path","file_name","getCurrentIdx","length","name","props","type","Array","default","current","Number","setup","value","__exports__","render","Watchlist","axios","inject","page","lastPage","load","watchlist","reactive","loading","data","error","loadingScroll","getWatchlist","isLoggedIn","authApi","get","params","then","resp","status","last_page","catch","console","log","finally","setWatchlist","product","post","product_id","handleScroll","window","innerHeight","scrollY","document","body","offsetHeight","i","push","onMounted","addEventListener","onUnmounted","removeEventListener","bundleItems","item","alt","href","slug","target","product_name","quantity","items","showAll","Object","splice","_arrayWithHoles","arr","isArray","_iterableToArrayLimit","_i","Symbol","iterator","_s","_e","_arr","_n","_d","call","next","done","err","_nonIterableRest","TypeError","_slicedToArray","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","module","exports","__webpack_amd_options__","company","moment","created_at","isCollapsedAll","onExpandAll","onCollapseAll","Distribution","brands","products","categories","company_details","res","getProducts","brand_id","category_id","getBrands","getCategories","brand","methods","date","format","querySelectorAll","forEach","b","click","defaultOptions","description","qty","preQty","store","route","cart","getters","Auth","mountCart","itemsByCat","element","variantId","variant","deleted_variant_id","immediate","deep","updateCart","add","variant_id","segmentQty","dispatch","Notifications","notifyme","deleteNotify","notify","idd","variants","has_notification","doNotNotify","lastOrdered","last_ordered","fromNow","addtowatchlist","prod","role","fill-rule","clip-rule","fill-opacity","isProductLoaded","product_images","tabindex","style","ref","triggerGalleryLightbox","activeImage","image","nonGallery","reloadSlider","isNextTriggered","$refs","largethumbnail","goToPrev","throttle-delay","fade","onSlideChange","$event","goToNext","updateCurrentSlide","to","slugUrl","brand_slug","animationData","heartJson","loop","isBundlePage","selectedBundle","aria-hidden","leave-active-class","leave-from-class","leave-to-class","sortVariants","as","active","selected","showReadMore","kits_variants","header","components","VueAgile","ChevronRightIcon","ChevronLeftIcon","ImagesGrid","Vue3Lottie","Listbox","ListboxButton","ListboxOptions","ListboxOption","SelectorIcon","BundleItems","mixins","inheritAttrs","emits","first_landed","newArrival","br","path","galleryCurrentIndex","showGalleryLightbox","beforeRouteEnter","from","vm","meta","breadCrumbs","replace","beforeMount","this","$store","ax","checkFirstLanded","pro","el","ld","first_landed_date","exD","Date","setDate","getDate","index","closeGalleryLightbox","showBulkPricing","showOrderInfo","thumbnails","main_Image","showAllComps","nonslider","getBrandImg","product_brand","base_url","checkInfoHeight","querySelector","clientHeight","isMobDevice","Product","productSlug","getProduct","compatible","getCompatibleproducts","bulk","getproductBulkDiscount","removefromwatchlist","getAllCompitables","getGalleryImages","map","prodImg","title","imageClick","varImg","selectedVariant","find","v","imageFileName","split","pop","clickIndex","findIndex","url","reload","e","currentSlide","goTo","setTimeout","isInfoModalVisible","currentProdSlug","isBrandsAndCategoriesLoading","openInfoModal","getImage","getBrandsAndCategories","categoriesPromises","Promise","allSettled","productsPromises","firstBrand","firstCategory","DistroInfo","BrandListItem","$","aFunction","newPromiseCapabilityModule","perform","iterate","stat","iterable","C","capability","f","resolve","reject","result","promiseResolve","values","counter","remaining","promise","alreadyCalled","undefined","reason","isMobile","mobileRE","notMobileRE","tabletRE","opts","ua","navigator","userAgent","headers","test","tablet","featureDetect","maxTouchPoints","indexOf","global","factory","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","createElement","extendPrototype","sources","destination","sourcePrototype","len","attr","prototype","hasOwnProperty","getDescriptor","object","prop","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","createTypedArrayFactory","Float32Array","Int16Array","Uint8ClampedArray","createSizedArray","apply","_typeof$6","obj","constructor","subframeEnabled","expressionsPlugin","idPrefix$1","isSafari","_shouldRoundValues","bmPow","Math","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","max","bmMin","min","BMMath","ProjectInterface$1","propertyNames","random","abs","val","tOfVal","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","round","styleDiv","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","s","r","g","p","q","t","RGBtoHSV","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","toString","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","_workerSelf","createWorker","fn","Worker","Blob","blob","URL","createObjectURL","setupWorker","dataFunctionManager","completeLayers","layers","comps","layerData","j","jLen","k","kLen","completed","tt","td","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","completeChars","chars","assets","findComp","comp","__used","JSON","parse","stringify","ks","it","o","checkVersion","minimum","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","checkChars","charData","ip","op","st","sr","a","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","checkShapes","completeClosingShapes","closed","cl","completeData","__complete","moduleOb","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","response","responseText","loadAsset","fullPath","callback","errorCallback","XMLHttpRequest","onreadystatechange","readyState","open","send","payload","animation","event","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","intervalId","setInterval","box","getBBox","_imageLoaded","clearInterval","bind","createImageData","ob","setAttributeNS","_elementHelper","append","appendChild","createImgData","crossOrigin","createFootageData","footageData","_footageLoaded","loadAssets","cb","_createImageData","setPath","setAssetsPath","getAsset","destroy","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","markerParser","parsePayloadLines","line","lines","keys","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","wrapper","container","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","parseInt","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","rendererType","initItems","gotoFrame","resize","updateContainerSize","setSubframe","renderFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","isNaN","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","getPath","getAssetData","hide","show","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","concat","slice","getElementsByClassName","setAttribute","getElementsByTagName","innerText","div","freeze","unfreeze","BezierFactory","getBezierEasing","beziers","str","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","_p","_mSampleValues","_precomputed","x","mY1","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","pooling","_double","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","create","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","BezierData","segmentLength","PointData","partial","partialLength","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","u1","ptX","ptY","bezierSegmentPoints","getNewSegment","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","bez","PropertyFactory","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","ti","ind","__fnct","y","n","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quatStart","createQuaternion","quatEnd","quaternionToEuler","slerp","omega","cosom","sinom","scale0","scale1","out","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","c1","cos","c2","c3","s1","s2","s3","w","z","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","getProp","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shapesEqual","shape1","shape2","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","m","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_a","_b","_c","_f","_typeof$3","lottie","setLocation","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","bodymovin","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","totalShapeLength","edges","newShapesData","addShapes","lastShapeInCollection","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","applyToMatrix","mat","rz","ry","rx","px","py","pz","forceRender","_isDirty","precalculateMatrix","pre","appliedTransformations","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","TransformProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","getFontProperties","fontData","styleName","styles","fStyle","fWeight","toLowerCase","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","itemsTransform","cont","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","FontManager","maxWaitingTime","emptyChar","size","combinedCharacters","surrogateModifiers","zeroWidthJoiner","trimFontOptions","font","familyArray","enabledFamilies","join","setUpNode","family","parentNode","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","parent","checkLoadedFonts","loadedCount","loaded","fOrigin","monoCase","sansCase","removeChild","now","checkLoadedFontsBinded","setIsLoadedBinded","createHelper","def","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measure","text","getComputedTextLength","measureText","list","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","fPath","rel","sc","found","ch","getCharData","_char","charCodeAt","warn","_warned","_char2","fontName","getFontByName","doubleSize","singleSize","fName","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","isCombinedCharacter","_char3","setIsLoaded","Font","typekitLoaded","fontPrototype","RenderableElement","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","MaskManagerInterface","MaskInterface","mask","_mask","_data","defineProperty","MaskManager","maskManager","_masksInterfaces","viewData","maskFunction","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","property","getVelocityAtTime","numKeys","valueProp","assign","valueAtTime","speedAtTime","getSpeedAtTime","velocityAtTime","propertyGroup","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","TransformExpressionInterface","_thisFunction","rotation","xRotation","yRotation","xPosition","yPosition","zPosition","anchorPoint","opacity","_px","_py","_pz","_transformFactory","LayerExpressionInterface","getMatrix","toWorldMat","propMatrix","_elem","transformMat","toWorldVec","applyPoint","toWorld","fromWorldVec","invertPoint","fromWorld","hierarchy","fromComp","sampleImage","transformInterface","_registerMaskInterface","_thisLayerFunction","_registerEffectsInterface","effects","effect","shapeInterface","textInterface","toComp","anchorPointDescriptor","defineProperties","hasParent","layerInterface","anchor_point","startTime","source","inPoint","outPoint","_name","registerMaskInterface","registerEffectsInterface","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","_propertyGroup","EffectsExpressionInterface","createEffectsInterface","effectsManager","effectElements","effectsData","ef","createGroupInterface","groupInterface","mn","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","CompExpressionInterface","layer","pixelAspect","compSize","frameDuration","displayStartTime","numLayers","ShapePathInterface","view","propertyIndex","ShapeExpressionInterface","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","transformInterfaceFactory","cix","content","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dataProps","strokeWidth","dash","start","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","parentGroupWrapper","TextExpressionInterface","_prevValue","_sourceText","sourceText","textProperty","stringValue","currentData","String","getBlendMode","blendModeEnums","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effectItem","GroupEffect","BaseElement","FrameElement","_typeof$2","eff","checkMasks","effectsInterface","shapesData","itemsData","setBlendMode","blendModeValue","bm","baseElement","layerElement","initBaseData","layerId","getType","prepareProperties","isVisible","_isParent","FootageInterface","outlineInterfaceFactory","currentPropertyName","currentProperty","getFootageData","searchProperty","propertyNameIndex","dataInterfaceFactory","outlineInterface","dataInterface","FootageElement","imageLoader","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","TransformElement","MaskElement","maskElement","solidPath","rect","expansor","feMorph","properties","count","currentMasks","maskType","maskRef","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","invRect","drawPath","maskedElement","getBaseElement","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","setAsParent","setHierarchy","addPendingElement","pendingElements","pathValue","setupGlobalData","fontsContainer","animationItem","initTransform","_matMdf","_opMdf","ao","renderTransform","finalMat","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","createFilter","filId","skipCoordinates","fil","createAlphaToLuminanceFilter","feColorMatrix","featureSupport","registeredEffects","idPrefix","SVGEffects","filterManager","filters","Effect","countsAsEffect","registerEffect","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","renderableEffectsManager","setMatte","initHierarchy","checkParenting","_prototype","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","shouldBreakProcess","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","diff","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","lj","ml","of","ms","ost","buildShapeString","_o","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","renderNoop","styleData","itemData","pathStringTransformed","redraw","iterations","lLen","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","GradientConstructor","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","shapeProperty","setElementStyles","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charCode","charactersArray","shouldCombine","charAt","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getTextSelectorProp","getMult","easer","tot","smoothness","threshold","newCharsFlag","divisor","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","animatorSelector","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","rot","atan","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","svgElement","ariaLabel","titleElement","titleId","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","destroyed","CVContextData","saved","cArrPos","cTr","cO","savedOp","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVEffects","CVMaskElement","hasMasks","CVBaseElement","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","CVShapeElement","CVTextElement","stroke","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","clearCanvas","context","dpr","devicePixelRatio","currentGlobalAlpha","contextData","CVCompElement","CanvasRenderer","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","appendElementInPos","nextElement","insertBefore","setElements","getElements","destroyElements","duplicate","newLength","currentSavedOp","set","sequence","processSequence","processSequences","getNewKey","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","createElements","blendMode","globalCompositeOperation","hideElement","showElement","forceRealStack","ctxTransform","ctxOpacity","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","drawImage","cProps","trProps","globalAlpha","actionFlag","popped","containerStyle","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","fillType","clearRect","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","bounds","shapeBoundingBox","xMax","right","yMax","bottom","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","currentBoxContains","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","tmpDOMElement","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","center","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","svg","cWidth","cHeight","floatingContainer","_createBaseContainerElements","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","_typeof$1","seedRandom","nodecrypto","chunks","digits","rngname","startdenom","significance","seedrandom","seed","options","entropy","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","prng","int32","quick","S","pass","is_math_call","state","copy","keylen","me","depth","typ","smear","stringseed","randomBytes","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","initialize$2","propTypes","SHAPE","_typeof","ExpressionManager","fetch","frames","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","rndm","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","loopIn","loop_in","loopOut","loop_out","smooth","fromCompToSurface","thisLayer","thisComp","scoped_bm_rt","expression_function","eval","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","yaw","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","randSeed","substring","posterizeTime","framesPerSecond","executeExpression","_value","frameExpressionId","__preventDeadCodeRemoval","expressionHelpers","searchExpressions","_cachingAtTime","delta","speed","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","endFrame","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","getShapeValueAtTime","shapeValue","lastTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","unitVector","tangentOnPath","normalOnPath","propertyGetShapeProp","trims","initialize$1","addDecorator","calculateExpression","getExpressionValue","isKeyframed","hasExpressions","initialize","SVGComposableEffect","SVGTintFilter","filter","matrixFilter","feMerge","createMergeNode","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","feGaussianBlur","feOffset","feFlood","feComposite","resultId","ins","feMergeNode","colorBlack","colorWhite","groupPath","elemChildren","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","Segments","ProductViewed","ProductViewedNonLoggedIn","useRoute","innerHTML","api","$findIndex","addToUnscopables","FIND_INDEX","SKIPS_HOLES","proto","forced","callbackfn","arguments","_export_sfc","sfc","__vccOpts","_sfc_main","animationLink","Boolean","autoPlay","delay","pauseOnHover","playOnHover","pauseAnimation","emit","lottieAnimation","elementid","checkIfContainerExists","elementID","loadLottie","async","json","getCurrentStyle","cssVariables","hoverStarted","hoverEnded","direction2","frame","setSubFrame","useSubFrame","inFrames","makeid","characters","charactersLength","setupLottie","interval","_hoisted_1","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","onMouseenter","onMouseleave","ProductNotify","notification","getNotifications","notifications","Open","Closed","captureStackTrace","H","defaultOpen","slots","attrs","buttonId","panelId","disclosureState","panel","button","closeDisclosure","HTMLElement","focus","close","theirProps","ourProps","slot","G","disabled","expose","$el","toggleDisclosure","D","Space","Enter","preventDefault","stopPropagation","onClick","onKeydown","onKeyup","J","static","unmount","features","RenderStrategy","Static","visible"],"mappings":"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","file":"js/distro-page.520128a7.js","sourcesContent":["\n\n\n\n\n","import { render } from \"./ImagesGrid.vue?vue&type=template&id=5fe875f0&scoped=true\"\nimport script from \"./ImagesGrid.vue?vue&type=script&lang=js\"\nexport * from \"./ImagesGrid.vue?vue&type=script&lang=js\"\n\nimport \"./ImagesGrid.vue?vue&type=style&index=0&id=5fe875f0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/var/lib/jenkins/workspace/MEDUSA_Frontend_NEW_Staging_XZT/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5fe875f0\"]])\n\nexport default __exports__","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImagesGrid.vue?vue&type=style&index=0&id=5fe875f0&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BundleItems.vue?vue&type=style&index=0&id=7cf63608&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BrandListItem.vue?vue&type=style&index=0&id=5e3426e4&lang=scss&scoped=true\"","import { inject, onMounted, onUnmounted, reactive } from 'vue';\nimport { useRoute } from 'vue-router'\n\nexport default function Watchlist() {\n\n const axios = inject('axios');\n\n var page = 1;\n let lastPage = 0;\n let load = false;\n\n const watchlist = reactive({\n loading: false,\n data: [],\n error: '',\n loadingScroll: false\n })\n const getWatchlist = async() => {\n if (axios.isLoggedIn) {\n watchlist.loading = true;\n load = true;\n axios.authApi.get('/watchlist', {\n params: {\n page: page\n }\n }).then((resp) => {\n if (resp.status) {\n watchlist.data = resp.data.data;\n lastPage = resp.data.data.last_page;\n load = false;\n } else {\n watchlist.error = resp.data.error;\n }\n }).catch(function(error) {\n console.log(error);\n }).finally(() => (watchlist.loading = false));\n } else {}\n };\n\n const setWatchlist = (product) => {\n if (product.watchlist == null) {\n axios.authApi.post('/add-watchlist', {\n product_id: product.id\n }).then((resp) => {\n if (resp.status) {\n return true;\n }\n }).catch(function(error) {\n console.log(error);\n });\n } else {\n axios.authApi.get('/remove-watchlist', {\n params: {\n product_id: product.id\n\n }\n }).then((resp) => {\n if (resp.status) {\n return false;\n }\n }).catch(function(error) {\n console.log(error);\n });\n }\n };\n\n const handleScroll = () => {\n if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {\n if (page < lastPage && !load) {\n page++;\n watchlist.loadingScroll = true;\n load = true;\n axios.authApi.get('/watchlist', {\n params: {\n page: page,\n }\n }).then((resp) => {\n if (resp.status) {\n for (let i in resp.data.data.data) {\n watchlist.data.data.push(resp.data.data.data[i]);\n }\n lastPage = resp.data.data.last_page;\n load = false;\n } else {\n watchlist.error = resp.data.error;\n }\n }).catch(function(error) {\n console.log(error);\n }).finally(() => (watchlist.loadingScroll = false));\n }\n }\n }\n\n // this will register the event when the component is mounted on the DOM\n onMounted(() => {\n window.addEventListener('scroll', handleScroll)\n });\n\n // We then unregister the listener when the component is removed from the DOM\n onUnmounted(() => {\n window.removeEventListener('scroll', handleScroll)\n });\n\n return {\n watchlist,\n setWatchlist,\n getWatchlist,\n isLoggedIn: axios.isLoggedIn\n }\n\n}","\n\n\n\n\n","import { render } from \"./BundleItems.vue?vue&type=template&id=7cf63608&scoped=true\"\nimport script from \"./BundleItems.vue?vue&type=script&lang=js\"\nexport * from \"./BundleItems.vue?vue&type=script&lang=js\"\n\nimport \"./BundleItems.vue?vue&type=style&index=0&id=7cf63608&lang=scss&scoped=true\"\n\nimport exportComponent from \"/var/lib/jenkins/workspace/MEDUSA_Frontend_NEW_Staging_XZT/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7cf63608\"]])\n\nexport default __exports__","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","\n\n\n\n\n","\n\n\n\n\n","import { inject, reactive, ref } from \"vue\";\n\nexport default function Distribution() {\n const axios = inject(\"axios\");\n\n const company = reactive({\n data: [],\n loading: false,\n });\n\n const brands = reactive({\n data: [],\n loading: false,\n });\n\n const products = reactive({\n data: {},\n loading: {},\n });\n const categories = reactive({\n data: {},\n loading: {},\n });\n\n const company_details = () => {\n company.loading = true;\n axios.authApi.get(\"distributor/company\").then((res) => {\n company.data = res.data.data;\n });\n };\n\n const getProducts = (brand_id, category_id) => {\n if (!products.data[brand_id]) {\n products.data[brand_id] = {};\n }\n\n products.loading[`${brand_id}-${category_id}`] = true; // Set loading to true\n\n if (!products.data[brand_id][category_id]) {\n return axios.authApi\n .get(\"distributor/products\", {\n params: {\n brand_id: brand_id,\n category_id: category_id,\n },\n })\n .then((res) => {\n products.data[brand_id][category_id] = res.data.data.data;\n })\n .finally(() => {\n products.loading[`${brand_id}-${category_id}`] = false; // Set loading to false once the request is completed\n });\n } else {\n products.loading[`${brand_id}-${category_id}`] = false; // Set loading to false if data already exists\n }\n };\n\n const getBrands = () => {\n brands.loading = true;\n return axios.authApi\n .get(\"distributor/brands\")\n .then((res) => {\n brands.data = res.data.data;\n })\n .finally(() => {\n brands.loading = false;\n });\n };\n\n const getCategories = (brand) => {\n if (!categories.data[brand.id]) {\n categories.loading[brand.id] = true;\n return axios.authApi\n .get(\"distributor/categories/\" + brand.slug)\n .then((res) => {\n categories.data[brand.id] = res.data.data;\n })\n .finally(() => {\n categories.loading[brand.id] = false;\n });\n }\n };\n\n return {\n company,\n company_details,\n getProducts,\n products,\n getCategories,\n categories,\n getBrands,\n brands,\n };\n}\n","import { render } from \"./DistroInfo.vue?vue&type=template&id=a0011868&scoped=true\"\nimport script from \"./DistroInfo.vue?vue&type=script&lang=js\"\nexport * from \"./DistroInfo.vue?vue&type=script&lang=js\"\n\nimport \"./DistroInfo.vue?vue&type=style&index=0&id=a0011868&lang=scss&scoped=true\"\n\nimport exportComponent from \"/var/lib/jenkins/workspace/MEDUSA_Frontend_NEW_Staging_XZT/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-a0011868\"]])\n\nexport default __exports__","\n\n\n\n\n","import { render } from \"./Sorting.vue?vue&type=template&id=19ff9c22&scoped=true\"\nimport script from \"./Sorting.vue?vue&type=script&lang=js\"\nexport * from \"./Sorting.vue?vue&type=script&lang=js\"\n\nimport \"./Sorting.vue?vue&type=style&index=0&id=19ff9c22&lang=scss&scoped=true\"\n\nimport exportComponent from \"/var/lib/jenkins/workspace/MEDUSA_Frontend_NEW_Staging_XZT/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-19ff9c22\"]])\n\nexport default __exports__","import script from \"./ProductInfo.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ProductInfo.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./VariantInfo.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./VariantInfo.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n\n\n","import script from \"./ProductRow.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ProductRow.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ProductRow.vue?vue&type=style&index=0&id=e205cb38&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n\n","import { render } from \"./ProductInfoModal.vue?vue&type=template&id=4ff43057&scoped=true\"\nimport script from \"./ProductInfoModal.vue?vue&type=script&lang=js\"\nexport * from \"./ProductInfoModal.vue?vue&type=script&lang=js\"\n\nimport \"./ProductInfoModal.vue?vue&type=style&index=0&id=4ff43057&lang=scss&scoped=true\"\nimport \"./ProductInfoModal.vue?vue&type=style&index=1&id=4ff43057&lang=scss\"\n\nimport exportComponent from \"/var/lib/jenkins/workspace/MEDUSA_Frontend_NEW_Staging_XZT/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4ff43057\"]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./BrandsListLoader.vue?vue&type=template&id=19681c3b&scoped=true\"\nimport script from \"./BrandsListLoader.vue?vue&type=script&lang=js\"\nexport * from \"./BrandsListLoader.vue?vue&type=script&lang=js\"\n\nimport \"./BrandsListLoader.vue?vue&type=style&index=0&id=19681c3b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/var/lib/jenkins/workspace/MEDUSA_Frontend_NEW_Staging_XZT/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-19681c3b\"]])\n\nexport default __exports__","\n\n\n\n\n","import script from \"./BrandListItem.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./BrandListItem.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./BrandListItem.vue?vue&type=style&index=0&id=5e3426e4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/var/lib/jenkins/workspace/MEDUSA_Frontend_NEW_Staging_XZT/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5e3426e4\"]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=f82b04ee&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=f82b04ee&lang=scss&scoped=true\"\n\nimport exportComponent from \"/var/lib/jenkins/workspace/MEDUSA_Frontend_NEW_Staging_XZT/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f82b04ee\"]])\n\nexport default __exports__","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ProductRow.vue?vue&type=style&index=0&id=e205cb38&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ProductInfoModal.vue?vue&type=style&index=1&id=4ff43057&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Sorting.vue?vue&type=style&index=0&id=19ff9c22&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./DistroInfo.vue?vue&type=style&index=0&id=a0011868&lang=scss&scoped=true\"","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BrandsListLoader.vue?vue&type=style&index=0&id=19681c3b&lang=scss&scoped=true\"","'use strict'\n\nmodule.exports = isMobile\nmodule.exports.isMobile = isMobile\nmodule.exports.default = isMobile\n\nconst mobileRE = /(android|bb\\d+|meego).+mobile|armv7l|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|samsungbrowser|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i\nconst notMobileRE = /CrOS/\n\nconst tabletRE = /android|ipad|playbook|silk/i\n\nfunction isMobile (opts) {\n if (!opts) opts = {}\n let ua = opts.ua\n if (!ua && typeof navigator !== 'undefined') ua = navigator.userAgent\n if (ua && ua.headers && typeof ua.headers['user-agent'] === 'string') {\n ua = ua.headers['user-agent']\n }\n if (typeof ua !== 'string') return false\n\n let result =\n (mobileRE.test(ua) && !notMobileRE.test(ua)) ||\n (!!opts.tablet && tabletRE.test(ua))\n\n if (\n !result &&\n opts.tablet &&\n opts.featureDetect &&\n navigator &&\n navigator.maxTouchPoints > 1 &&\n ua.indexOf('Macintosh') !== -1 &&\n ua.indexOf('Safari') !== -1\n ) {\n result = true\n }\n\n return result\n}\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ProductInfoModal.vue?vue&type=style&index=0&id=4ff43057&lang=scss&scoped=true\"","(typeof navigator !== \"undefined\") && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n var svgNS = 'http://www.w3.org/2000/svg';\n var locationHref = '';\n var _useWebWorker = false;\n var initialDefaultFrame = -999999;\n\n var setWebWorker = function setWebWorker(flag) {\n _useWebWorker = !!flag;\n };\n\n var getWebWorker = function getWebWorker() {\n return _useWebWorker;\n };\n\n var setLocationHref = function setLocationHref(value) {\n locationHref = value;\n };\n\n var getLocationHref = function getLocationHref() {\n return locationHref;\n };\n\n function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n // import Howl from '../../3rd_party/howler';\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n }\n\n if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\n });\n }\n\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n\n this._updateVolume();\n },\n getVolume: function getVolume() {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n\n default:\n value = 1.1;\n break;\n }\n\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n\n return arr;\n }\n\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n\n if (type === 'int16') {\n return new Int16Array(len);\n }\n\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n\n return createRegularArray(type, len);\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n\n return createRegularArray;\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n var subframeEnabled = true;\n var expressionsPlugin = null;\n var idPrefix$1 = '';\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var _shouldRoundValues = false;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n\n (function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface$1() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n\n return value;\n }\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\n\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n\n default:\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n\n default:\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\n };\n\n var getIdPrefix = function getIdPrefix() {\n return idPrefix$1;\n };\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n\n return JSON.parse(JSON.stringify(comp.layers));\n }\n\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n\n return null;\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n }\n };\n\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: 'no'\n });\n charData.data.shapes[0].it.push({\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n },\n sk: {\n k: 0,\n a: 0\n },\n sa: {\n k: 0,\n a: 0\n },\n ty: 'tr'\n });\n }\n }\n }\n }\n };\n }();\n\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n\n try {\n xhr.open('GET', path, true);\n } catch (error) {\n xhr.open('GET', fullPath + '/' + path, true);\n }\n\n xhr.send();\n }\n\n return {\n load: loadAsset\n };\n }();\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n\n _workerSelf.dataManager.completeData(animation);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n\n if (box.width || _count > 500) {\n this._imageLoaded();\n\n clearInterval(intervalId);\n }\n\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n\n if (keysCount === 0) {\n throw new Error();\n }\n\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n\n markers.push(markerData);\n }\n\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n\n function getRenderer(key) {\n return renderers[key];\n }\n\n function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = 'svg';\n\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n\n var RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (_typeof$4(animationData) !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== 'false';\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n this.setParams(params);\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_pause');\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_play');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n\n return null;\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.renderer = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {// TODO: decide how to handle catch case\n }\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize; // moduleOb.start = start;\n\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n /* eslint-disable */\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n var pooling = function () {\n function _double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n \"double\": _double\n };\n }();\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n }();\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments())\n };\n }\n\n return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n\n flag = false;\n }\n }\n\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0t0 = t0 * t0 * t0; //\n\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0t1 = t0 * t0 * t1; //\n\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1t1 = t0 * t1 * t1; //\n\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n var PropertyFactory = function () {\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyframeMetadata.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n function getProp(elem, data, type, mult, container) {\n var p;\n\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n\n default:\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\n\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return poolFactory(8, create);\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n\n default:\n arr = [];\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n\n return newPath;\n };\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n var shapeCollectionPool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching); /// /\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i;\n var len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue;\n\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n\n var i;\n var len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2; // }\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\n function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n function setLocation(href) {\n setLocationHref(href);\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n\n case 'matrix':\n return Matrix;\n\n default:\n return null;\n }\n }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocation;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize; // lottie.start = start;\n\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.useWebWorker = setWebWorker;\n lottie.setIDPrefix = setPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.9.4';\n\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n\n return null;\n }\n\n var queryString = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n try {\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n } catch (err) {//\n }\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return clonedPath;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n if (!this.a.k) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {//\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n\n while (pos > 0) {\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 1,\n ix: 6,\n k: [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n s: {\n a: 0,\n ix: 3,\n k: [100, 100]\n },\n sa: {\n a: 0,\n ix: 5,\n k: 0\n },\n sk: {\n a: 0,\n ix: 4,\n k: 0\n },\n ty: 'tr'\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n\n cont += 1;\n }\n\n this._currentCopies = copies; /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n\n return hasReloaded;\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return clonedPath;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = []; // Hindi characters\n\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n var zeroWidthJoiner = [65039, 8205];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode); // Remember width with no applied web font\n\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n\n return helper.measureText(text).width;\n }\n\n return {\n measureText: measure\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach(function (data) {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n }\n\n return emptyChar;\n }\n\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName);\n\n var index = _char2.charCodeAt(0);\n\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper;\n\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index + 1] = tHelper.measureText(_char2) / 100;\n }\n }\n\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n if (!secondCharCode) {\n return firstCharCode === zeroWidthJoiner[1];\n }\n\n return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n }\n\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isCombinedCharacter = isCombinedCharacter;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; // layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; // list of animated components\n\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n }\n\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n\n return this._mask.op.v * 100;\n }\n });\n\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i;\n var len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n\n var value = '';\n\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n val = property.v * mult;\n\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n\n return expressionValue;\n };\n } // TODO: try to avoid using this getter\n\n\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n\n return MultidimensionalPropertyInterface(property);\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s)\n });\n\n var _px;\n\n var _py;\n\n var _pz;\n\n var _transformFactory;\n\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n }\n\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n\n default:\n return null;\n }\n }\n\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n\n return effectElements[i]();\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return null; // return {active:false};\n }\n\n Object.defineProperty(_thisLayerFunction, '_name', {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n _name: {\n value: shape.nm\n },\n ix: {\n value: shape.ix\n },\n propertyIndex: {\n value: shape.ix\n },\n mn: {\n value: shape.mn\n },\n propertyGroup: {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); // interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function get() {\n return 'a';\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function get() {\n return dashOb;\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n\n if (value === 0) {\n return propertyGroup;\n }\n\n return interfaces[value - 1];\n }\n\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function parentGroupWrapper() {\n return propertyGroup;\n }\n\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _prevValue;\n\n var _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n\n if (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n eff = null;\n\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0;\n var len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n /**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n function FrameElement() {}\n\n FrameElement.prototype = {\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false; // list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\n\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n\n if (_typeof$2(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n var propertyNameIndex = value.indexOf(currentPropertyName);\n\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n\n if (_typeof$2(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n return '';\n }\n\n return init;\n };\n\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n\n FootageElement.prototype.prepareFrame = function () {};\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n\n FootageElement.prototype.renderFrame = function () {};\n\n FootageElement.prototype.destroy = function () {};\n\n FootageElement.prototype.initExpressions = function () {\n this.layerInterface = FootageInterface(this);\n };\n\n FootageElement.prototype.getFootageData = function () {\n return this.footageData;\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n k: [100]\n }, 1, 0.01, this);\n }\n\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 15:\n return this.createFootage(layer);\n\n default:\n return this.createNull(layer);\n }\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n\n if (path.length === 0) {\n return element;\n }\n\n return element.getElementByPath(path);\n };\n\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix()\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } // TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {// this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i;\n var len = transforms.length;\n var ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n } // pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n return ob;\n }();\n\n var registeredEffects = {};\n var idPrefix = 'filter_result_';\n\n function SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n\n if (registeredEffects[type].countsAsEffect) {\n count += 1;\n }\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n function registerEffect(id, effect, countsAsEffect) {\n registeredEffects[id] = {\n effect: effect,\n countsAsEffect: countsAsEffect\n };\n }\n\n function SVGBaseElement() {}\n\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n var filId;\n var fil;\n var gg;\n\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n // eslint-disable-line eqeqeq\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\n\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\n\n if (!featureSupport.maskType && this.data.td == 1) {\n // eslint-disable-line eqeqeq\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (this.data.td == 2) {\n // eslint-disable-line eqeqeq\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); /// /\n // This solution doesn't work on Android when meta tag with viewport attribute is set\n\n /* var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix); */\n /// /\n\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc); /// /\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\n function HierarchyElement() {}\n\n HierarchyElement.prototype = {\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\n\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n\n function RenderableDOMElement() {}\n\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i;\n var len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0;\n var len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n\n case 'no':\n return renderNoop;\n\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {}\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var props;\n var iterations;\n var k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops;\n var i;\n var len;\n var stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n } // gfill.setAttribute('fy','200');\n\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\n\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n\n while (i < len) {\n charCode = text.charCodeAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n shouldCombine = false;\n } else {\n charactersArray.push(text.substr(i, 2));\n }\n\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n shouldCombine = true;\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n shouldCombine = true;\n } else {\n charactersArray.push(text.charAt(i));\n }\n\n i += 1;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n } // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n\n var threshold = 0.5 - smoothness * 0.5;\n\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r.v) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO; //\n\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n } //\n\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n\n default:\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true; // Force alignment only works with a single line for now\n\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\n\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n\n var emptyShapeData = {\n shapes: []\n };\n\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n\n return data;\n };\n\n SVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n default:\n justify = 'start';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n } //\n\n }\n\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n\n extendPrototype([BaseRenderer], SVGRendererBase);\n\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRendererBase.prototype.updateContainerSize = function () {};\n\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n };\n\n SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\n };\n /* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n }; */\n\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i;\n var len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n SVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n },\n width: config && config.width,\n height: config && config.height\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n\n extendPrototype([SVGRendererBase], SVGRenderer);\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i;\n var len = 15;\n this.savedOp = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = len;\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray('float32', newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n };\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n\n function CVEffects() {}\n\n CVEffects.prototype.renderFrame = function () {};\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n\n this.hasMasks = hasMasks;\n\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\n\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects(this);\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem[\"do\"] = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n\n CVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type; // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n\n renderer.ctxOpacity(currentStyle.coOp);\n\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st' || type === 'gs') {\n ctx.stroke();\n\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n\n if (type !== 'st' && type !== 'gs') {\n ctx.fill(currentStyle.r);\n }\n\n renderer.restore();\n }\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {//\n }\n }\n\n if (isMain) {\n this.drawLayer();\n }\n };\n\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n\n styledShape.trNodes = shapeNodes;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n\n styleElem.grd = grd;\n }\n\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\n }\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill(); /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke(); /// ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n\n CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVSolidElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh); //\n };\n\n function CanvasRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n }\n\n extendPrototype([BaseRenderer], CanvasRendererBase);\n\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n /* if(op === 1){\r\n return;\r\n } */\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n\n this.contextData.cO *= op < 0 ? 0 : op;\n\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n };\n\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRendererBase.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.save();\n }\n\n var props = this.contextData.cTr.props;\n\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n\n var i;\n var arr = this.contextData.saved[this.contextData.cArrPos];\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n };\n\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i;\n var arr = this.contextData.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n\n if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n };\n\n CanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n\n CanvasRendererBase.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth;\n var elementHeight;\n\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n\n var elementRel;\n var animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n // console.log('NEW: ',num);\n\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\n };\n\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.layers = null;\n this.elements = null;\n };\n\n CVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n }\n\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\n }\n\n if (this.finalTransform._opMdf) {\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n HSolidElement.prototype.createContent = function () {\n var rect;\n\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n\n this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n\n return point;\n };\n\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i;\n var len = shape._length;\n var vPoint;\n var oPoint;\n var nextIPoint;\n var nextVPoint;\n\n if (len <= 1) {\n return;\n }\n\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n };\n\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n // eslint-disable-line no-plusplus\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b |= 0; // eslint-disable-line no-bitwise\n\n a |= 0; // eslint-disable-line no-bitwise\n\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {//\n } else if (a === 0) {\n t = -c / b;\n\n if (t > 0 && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n } else {\n b2ac = b * b - 4 * c * a;\n\n if (b2ac >= 0) {\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n }\n }\n\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n }\n }\n };\n\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n\n var changed = false;\n\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n var shapeStyle = this.shapeCont.style;\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n shapeStyle.transform = shapeTransform;\n shapeStyle.webkitTransform = shapeTransform;\n }\n }\n };\n\n function HTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n\n this.checkParenting();\n };\n\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n innerElemStyle.fill = textColor;\n innerElemStyle.color = textColor;\n\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i;\n var len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan;\n var tParent;\n var tCont;\n var matrixHelper = this.mHelper;\n var shapes;\n var shapeStr = '';\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('path');\n tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n } // tSpan.setAttribute('visibility', 'hidden');\n\n\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n\n matrixHelper.reset();\n\n if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n\n if (shapeData && shapeData.shapes) {\n // document.body.appendChild is needed to get exact measure of shape\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n var tContStyle = tCont.style;\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n tContStyle.transform = tContTranslation;\n tContStyle.webkitTransform = tContTranslation;\n letters[i].yOffset = boundingBox.y - 1;\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n\n tParent.appendChild(tCont);\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent); //\n\n var tStyle = tSpan.style;\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n tStyle.transform = tSpanTranslation;\n tStyle.webkitTransform = tSpanTranslation;\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } //\n\n\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n\n HTextElement.prototype.renderInnerContent = function () {\n var svgStyle;\n\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n }\n\n if (this.isMasked && this.finalTransform._matMdf) {\n // Todo Benchmark if using this is better than getBBox\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n svgStyle = this.svgElement.style;\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n svgStyle.transform = translation;\n svgStyle.webkitTransform = translation;\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i;\n var len;\n var count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n } else {\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.webkitTransform = renderedLetter.m;\n textSpan.style.transform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n svgStyle = this.svgElement.style;\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n svgStyle.transform = svgTransform;\n svgStyle.webkitTransform = svgTransform;\n }\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i;\n var len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n this.finalTransform = {\n mProp: this\n };\n }\n\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i;\n var len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n perspectiveStyle = comp.perspectiveElem.style;\n containerStyle = comp.container.style;\n var perspective = this.pe.v + 'px';\n var origin = '0px 0px 0px';\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveStyle.perspective = perspective;\n perspectiveStyle.webkitPerspective = perspective;\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n perspectiveStyle.transform = matrix;\n perspectiveStyle.webkitTransform = matrix;\n }\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n\n if (this.hierarchy) {\n len = this.hierarchy.length - 1;\n\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector;\n\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n var matValue = this.mat.toCSS();\n containerStyle = comp.container.style;\n containerStyle.transform = matValue;\n containerStyle.webkitTransform = matValue;\n }\n\n if (this.pe._mdf) {\n perspectiveStyle = comp.perspectiveElem.style;\n perspectiveStyle.perspective = this.pe.v + 'px';\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n\n this.mat.clone(this._prevMat);\n }\n }\n\n this._isFirstFrame = false;\n };\n\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HybridRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement;\n var nextLayer;\n var tmpDOMElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n\n return new HShapeElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n\n return new HImageElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n\n return new HSolidElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n\n return null;\n };\n\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n var style;\n var containerStyle;\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n style = perspectiveElem.style;\n style.width = this.globalData.compSize.w + 'px';\n style.height = this.globalData.compSize.h + 'px';\n var center = '50% 50%';\n style.webkitTransformOrigin = center;\n style.mozTransformOrigin = center;\n style.transformOrigin = center;\n containerStyle = container.style;\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n containerStyle.transform = matrix;\n containerStyle.webkitTransform = matrix;\n }\n\n perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n\n len = this.threeDElements.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRendererBase.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n var style = resizerElem.style;\n style.width = animData.w + 'px';\n style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n style.transformStyle = 'flat';\n style.mozTransformStyle = 'flat';\n style.webkitTransformStyle = 'flat';\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData; // Mask animation\n\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n this.elements[i].destroy();\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRendererBase.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx;\n var sy;\n var tx;\n var ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n var style = this.resizerElem.style;\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n style.transform = style.webkitTransform;\n };\n\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i;\n var len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n var style = this.threeDElements[i].perspectiveElem.style;\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n style.perspective = style.webkitPerspective;\n }\n }\n };\n\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([HybridRendererBase], HybridRenderer);\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n\n return ob;\n }();\n\n function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n /* eslint-disable */\n\n /*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\n function seedRandom(pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$1(obj),\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n }\n\n ;\n\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n initialize$2(BMMath);\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n }\n\n function $bm_neg(a) {\n var tOfA = _typeof(a);\n\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n\n if (a.propType) {\n return a.v;\n }\n\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n\n return a % b;\n }\n\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n\n default:\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n\n b = l; // achromatic\n\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n\n if (t <= tMin) {\n return value1;\n }\n\n if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i;\n var len = max.length;\n\n if (!min) {\n min = createTypedArray('float32', len);\n }\n\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n }\n\n iWiggle += 1;\n } // var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n }\n\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n\n return arr;\n }\n\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n lenKey = arr.length;\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n\n return value.substring(init, end);\n }\n\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n\n return value.substr(init, end);\n }\n\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n expression_function();\n this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n } // Bundlers will see these as dead code and unless we reference them\n\n\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath];\n return ob;\n }();\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n\n if (v1.length) {\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.001; // frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n\n if (samples <= 1) {\n return this.pv;\n }\n\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n\n var sampleValue;\n\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n\n i += 1;\n }\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n } /// /\n\n\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n\n return matrix; /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) {\n // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) {\n // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n if (magnitude === 0) {\n return [0, 0];\n }\n\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n };\n }\n\n function initialize$1() {\n addPropertyDecorator();\n }\n\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\n\n SVGComposableEffect.prototype = {\n createMergeNode: function createMergeNode(resultId, ins) {\n var feMerge = createNS('feMerge');\n feMerge.setAttribute('result', resultId);\n var feMergeNode;\n var i;\n\n for (i = 0; i < ins.length; i += 1) {\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', ins[i]);\n feMerge.appendChild(feMergeNode);\n feMerge.appendChild(feMergeNode);\n }\n\n return feMerge;\n }\n };\n\n function SVGTintFilter(filter, filterManager, elem, id, source) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n filter.appendChild(feMerge);\n }\n\n extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id);\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(fil, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n filter.appendChild(feComponentTransfer);\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB);\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n } // Green\n\n\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n } // Blue\n\n\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n } // Alpha\n\n\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n } // RGB\n\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n }\n\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n var filterSize = filterManager.container.globalData.renderConfig.filterSize;\n filter.setAttribute('x', filterSize.x);\n filter.setAttribute('y', filterSize.y);\n filter.setAttribute('width', filterSize.width);\n filter.setAttribute('height', filterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = createNS('feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', id + '_drop_shadow_1');\n feOffset.setAttribute('result', id + '_drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = createNS('feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', id + '_drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', id + '_drop_shadow_3');\n feComposite.setAttribute('in2', id + '_drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', id + '_drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n filter.appendChild(feMerge); //\n }\n\n extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n }\n };\n\n var _svgMatteSymbols = [];\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n\n i += 1;\n }\n\n var nextChild;\n\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n\n _svgMatteSymbols.push(mask);\n\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n\n elem.setMatte(mask.layerId);\n };\n\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('result', id);\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n ShapeModifiers.registerModifier('rd', RoundCornersModifier); // Registering expression plugin\n\n setExpressionsPlugin(Expressions);\n initialize$1();\n initialize(); // Registering svg effects\n\n registerEffect(20, SVGTintFilter, true);\n registerEffect(21, SVGFillFilter, true);\n registerEffect(22, SVGStrokeEffect, false);\n registerEffect(23, SVGTritoneFilter, true);\n registerEffect(24, SVGProLevelsFilter, true);\n registerEffect(25, SVGDropShadowEffect, true);\n registerEffect(28, SVGMatte3Effect, false);\n registerEffect(29, SVGGaussianBlurEffect, true);\n\n return lottie;\n\n}));\n","import { inject, reactive } from 'vue';\nimport Segments from './Segments';\nimport { useRoute } from 'vue-router';\nconst { ProductViewed,ProductViewedNonLoggedIn } = Segments();\n\nexport default function Product(productSlug = null) {\n\n let product_id;\n const axios = inject('axios');\n\n const product = reactive({\n loading: false,\n data: [],\n error: '',\n watchlist: 0\n })\n const route = useRoute();\n\n const getProduct = async() => {\n console.log(productSlug)\n if (axios.isLoggedIn) {\n product.loading = true;\n let slug = productSlug ? productSlug : route.params.slug;\n\n axios.authApi.get('/product/' + slug).then((resp) => {\n if (resp.status) {\n product.data = resp.data.data;\n document.getElementsByTagName(\"title\")[0].innerHTML = `${product.data.product.name} - ${product.data.product.brand} - Wholesale`;\n product_id = product.data.product.id;\n product.watchlist = product.data.product.watchlist ? 1 : 0;\n ProductViewed(route,product.data);\n } else {\n product.error = resp.data.error;\n }\n }).catch(function(error) {\n console.log(error);\n }).finally(() => (product.loading = false));\n } else {\n product.loading = true;\n let slug = route.params.slug;\n\n axios.api.get('/products/' + slug).then((resp) => {\n if (resp.status) {\n product.data = resp.data.data;\n // product_id = product.data.product.id;\n ProductViewedNonLoggedIn(route,product.data);\n } else {\n product.error = resp.data.error;\n }\n }).catch(function(error) {\n console.log(error);\n }).finally(() => (product.loading = false));\n }\n };\n const compatible = reactive({\n loading: false,\n data: [],\n error: ''\n })\n const getCompatibleproducts = async() => {\n if (axios.isLoggedIn) {\n compatible.loading = true;\n let slug = productSlug ? productSlug : route.params.slug;\n\n axios.authApi.get('/compatible-products/' + slug).then((resp) => {\n if (resp.status) {\n compatible.data = resp.data.data;\n } else {\n compatible.error = resp.data.error;\n }\n }).catch(function(error) {\n console.log(error);\n }).finally(() => (compatible.loading = false));\n } else {}\n };\n\n const addtowatchlist = async() => {\n if(product.watchlist == 0){\n axios.authApi.post('/add-watchlist', {\n product_id: product_id\n }).then((resp) => {\n if (resp.status) {\n product.watchlist = 1;\n }\n }).catch(function(error) {\n console.log(error);\n });\n } else {\n axios.authApi.get('/remove-watchlist', {\n params: {\n product_id: product_id\n }\n }).then((resp) => {\n if (resp.status) {\n product.watchlist = 0;\n }\n }).catch(function(error) {\n console.log(error);\n });\n }\n\n };\n\n return {\n product,\n getProduct,\n compatible,\n getCompatibleproducts,\n addtowatchlist,\n isLoggedIn: axios.isLoggedIn,\n }\n\n}","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","import { defineComponent, ref, computed, watch, onMounted, openBlock, createElementBlock, normalizeStyle } from \"vue\";\nimport Lottie from \"lottie-web\";\nvar vue3Lottie_vue_vue_type_style_index_0_lang = \"\";\nvar _export_sfc = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n};\nconst _sfc_main = defineComponent({\n props: {\n animationData: {\n type: Object,\n default: () => ({})\n },\n animationLink: {\n type: String,\n default: \"\"\n },\n loop: {\n type: [Boolean, Number],\n default: true\n },\n autoPlay: {\n type: Boolean,\n default: true\n },\n width: {\n type: [Number, String],\n default: \"100%\"\n },\n height: {\n type: [Number, String],\n default: \"100%\"\n },\n speed: {\n type: Number,\n default: 1\n },\n delay: {\n type: Number,\n default: 0\n },\n direction: {\n type: String,\n default: \"forward\"\n },\n pauseOnHover: {\n type: Boolean,\n default: false\n },\n playOnHover: {\n type: Boolean,\n default: false\n },\n backgroundColor: {\n type: String,\n default: \"transparent\"\n },\n pauseAnimation: {\n type: Boolean,\n default: false\n }\n },\n emits: {\n onComplete: null,\n onLoopComplete: null,\n onEnterFrame: null,\n onSegmentStart: null\n },\n setup(props, { emit: emits }) {\n let lottieAnimation = ref(null);\n const elementid = ref(\"\");\n let direction = 1;\n const checkIfContainerExists = (elementID) => {\n if (document.querySelector(`[data-id=\"${elementID}\" ]`) !== null) {\n return true;\n } else {\n return false;\n }\n };\n const loadLottie = async (element) => {\n let autoPlay = props.autoPlay;\n if (props.playOnHover) {\n autoPlay = false;\n }\n let animationData = {};\n if (props.animationData !== {}) {\n animationData = JSON.parse(JSON.stringify(props.animationData));\n }\n if (props.animationLink != \"\") {\n try {\n const response = await fetch(props.animationLink);\n const json = await response.json();\n animationData = json;\n } catch (error) {\n console.error(error);\n return;\n }\n }\n let loop = props.loop;\n if (typeof loop === \"number\") {\n if (loop > 0) {\n loop = loop - 1;\n }\n }\n if (props.delay > 0) {\n autoPlay = false;\n }\n lottieAnimation = Lottie.loadAnimation({\n container: element,\n renderer: \"svg\",\n loop,\n autoplay: autoPlay,\n animationData\n });\n setTimeout(() => {\n autoPlay = props.autoPlay;\n if (props.playOnHover) {\n lottieAnimation.pause();\n } else {\n lottieAnimation.play();\n }\n }, props.delay);\n lottieAnimation.setSpeed(props.speed);\n if (props.direction === \"reverse\") {\n lottieAnimation.setDirection(-1);\n }\n if (props.direction === \"normal\") {\n lottieAnimation.setDirection(1);\n }\n if (props.pauseAnimation) {\n lottieAnimation.pause();\n } else {\n if (props.playOnHover) {\n lottieAnimation.pause();\n }\n }\n lottieAnimation.addEventListener(\"loopComplete\", () => {\n if (props.direction === \"alternate\") {\n lottieAnimation.stop();\n direction = direction * -1;\n lottieAnimation.setDirection(direction);\n lottieAnimation.play();\n }\n emits(\"onLoopComplete\");\n });\n lottieAnimation.addEventListener(\"complete\", () => {\n emits(\"onComplete\");\n });\n lottieAnimation.addEventListener(\"enterFrame\", () => {\n emits(\"onEnterFrame\");\n });\n lottieAnimation.addEventListener(\"segmentStart\", () => {\n emits(\"onSegmentStart\");\n });\n };\n const getCurrentStyle = computed(() => {\n let width = props.width;\n let height = props.height;\n if (typeof props.width === \"number\") {\n width = `${props.width}px`;\n }\n if (typeof props.height === \"number\") {\n height = `${props.height}px`;\n }\n let cssVariables = {\n \"--lottie-animation-container-width\": width,\n \"--lottie-animation-container-height\": height,\n \"--lottie-animation-container-background-color\": props.backgroundColor\n };\n return cssVariables;\n });\n const hoverStarted = () => {\n if (lottieAnimation && props.pauseOnHover) {\n lottieAnimation.pause();\n }\n if (lottieAnimation && props.playOnHover) {\n lottieAnimation.play();\n }\n };\n const hoverEnded = () => {\n if (lottieAnimation && props.pauseOnHover) {\n lottieAnimation.play();\n }\n if (lottieAnimation && props.playOnHover) {\n lottieAnimation.pause();\n }\n };\n watch(props, () => {\n if ((props.pauseOnHover || props.playOnHover) && !props.pauseAnimation) {\n console.error(\"If you are using pauseAnimation prop for Vue3-Lottie, please remove the props pauseOnHover or playOnHover\");\n }\n if (!props.pauseOnHover && !props.playOnHover) {\n if (props.pauseAnimation && lottieAnimation) {\n lottieAnimation.pause();\n } else if (lottieAnimation && !props.pauseAnimation) {\n lottieAnimation.play();\n }\n }\n });\n const play = () => {\n if (lottieAnimation) {\n lottieAnimation.play();\n }\n };\n const pause = () => {\n if (lottieAnimation) {\n lottieAnimation.pause();\n }\n };\n const stop = () => {\n if (lottieAnimation) {\n lottieAnimation.stop();\n }\n };\n const destroy = () => {\n if (lottieAnimation) {\n lottieAnimation.destroy();\n }\n };\n const setSpeed = (speed = 1) => {\n if (speed <= 0) {\n throw new Error(\"Speed must be greater than 0\");\n }\n if (lottieAnimation) {\n lottieAnimation.setSpeed(speed);\n }\n };\n const setDirection = (direction2) => {\n if (lottieAnimation) {\n if (direction2 === \"forward\") {\n lottieAnimation.setDirection(1);\n } else if (direction2 === \"reverse\") {\n lottieAnimation.setDirection(-1);\n }\n }\n };\n const goToAndStop = (frame, isFrame = true) => {\n if (lottieAnimation) {\n lottieAnimation.goToAndStop(frame, isFrame);\n }\n };\n const goToAndPlay = (frame, isFrame = true) => {\n if (lottieAnimation) {\n lottieAnimation.goToAndPlay(frame, isFrame);\n }\n };\n const playSegments = (segments, forceFlag = false) => {\n if (lottieAnimation) {\n lottieAnimation.playSegments(segments, forceFlag);\n }\n };\n const setSubFrame = (useSubFrame = true) => {\n if (lottieAnimation) {\n lottieAnimation.setSubframe(useSubFrame);\n }\n };\n const getDuration = (inFrames = true) => {\n if (lottieAnimation) {\n return lottieAnimation.getDuration(inFrames);\n }\n };\n const makeid = (length) => {\n var result = \"\";\n var characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n var charactersLength = characters.length;\n for (var i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n };\n const setupLottie = (elementID) => {\n if (props.pauseOnHover && props.playOnHover) {\n throw new Error(\"You cannot set pauseOnHover and playOnHover for Vue3-Lottie at the same time.\");\n }\n if (props.animationLink === \"\" && props.animationData === {}) {\n throw new Error(\"You must provide either animationLink or animationData\");\n }\n const interval = setInterval(() => {\n if (checkIfContainerExists(elementID)) {\n clearInterval(interval);\n const element = document.querySelector(`[data-id=\"${elementID}\" ]`);\n if (element) {\n loadLottie(element);\n }\n }\n }, 0);\n };\n onMounted(async () => {\n elementid.value = makeid(20);\n setupLottie(elementid.value);\n });\n return {\n elementid,\n hoverEnded,\n hoverStarted,\n getCurrentStyle,\n play,\n pause,\n stop,\n destroy,\n setSpeed,\n setDirection,\n goToAndStop,\n goToAndPlay,\n playSegments,\n setSubFrame,\n getDuration\n };\n }\n});\nconst _hoisted_1 = [\"data-id\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", {\n \"data-id\": _ctx.elementid,\n class: \"lottie-animation-container\",\n style: normalizeStyle(_ctx.getCurrentStyle),\n onMouseenter: _cache[0] || (_cache[0] = (...args) => _ctx.hoverStarted && _ctx.hoverStarted(...args)),\n onMouseleave: _cache[1] || (_cache[1] = (...args) => _ctx.hoverEnded && _ctx.hoverEnded(...args))\n }, null, 44, _hoisted_1);\n}\nvar Vue3Lottie = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nfunction install(app, options) {\n const finalOptions = Object.assign({}, {\n name: \"Vue3Lottie\"\n }, options);\n app.component(`${finalOptions.name}`, Vue3Lottie);\n}\nconst plugin = {\n version: \"2.1.0\",\n install\n};\nexport { Vue3Lottie, plugin as default, install };\n","import { inject, reactive } from \"vue\";\nimport Segments from \"@/modules/Segments\";\nimport { useRoute } from 'vue-router';\nconst { ProductNotify } = Segments();\n\n\nexport default function Notifications() {\n const axios = inject('axios');\n const route = useRoute();\n const notification = reactive({\n loading: false,\n error: '',\n data: [],\n count: 0,\n });\n const getNotifications = async() => {\n if (axios.isLoggedIn) {\n notification.loading = true;\n axios.authApi.get(\"/notifications\")\n .then((response) => {\n if (response.data.status) {\n notification.data = (response.data.data.notifications)\n notification.count = response.data.data.count\n } else {\n notification.error = response.data.error;\n }\n })\n .catch(function(error) {\n console.log(error);\n }).finally(() => (notification.loading = false));\n }\n };\n\n const notify = reactive({\n loading: false,\n error: '',\n data: [],\n });\n const notifyme = async(variant,pro,type=null) => {\n if (axios.isLoggedIn) {\n notify.loading = true;\n axios.authApi.post(\"/notify\", {\n variant_id: variant.id\n }).then((resp) => {\n if (resp.data.status) {\n notify.data = resp.data.data;\n ProductNotify('add',route,variant,pro,type);\n } else {\n notify.error = resp.data.error;\n }\n })\n .catch(function(error) {\n console.log(error);\n }).finally(() => (notify.loading = false));\n }\n };\n const deleteNotify = async(variant,pro,type=null) => {\n if (axios.isLoggedIn) {\n notify.loading = true;\n axios.authApi.post(\"/delete-notify\", {\n variant_id: variant.id\n }).then((resp) => {\n\n if (resp.data.status) {\n notify.data = resp.data.data;\n ProductNotify('remove',route,variant,pro,type);\n } else {\n notify.error = resp.data.error;\n }\n })\n .catch(function(error) {\n console.log(error);\n }).finally(() => (notify.loading = false));\n }\n };\n return {\n notification,\n getNotifications,\n notify,\n notifyme,\n deleteNotify\n }\n}","import{defineComponent as y,ref as S,provide as O,inject as P,computed as b,watchEffect as T}from\"vue\";import{Keys as f}from'../../keyboard.js';import{match as h}from'../../utils/match.js';import{render as v,Features as E}from'../../utils/render.js';import{useId as I}from'../../hooks/use-id.js';import{dom as p}from'../../utils/dom.js';import{useOpenClosedProvider as k,State as g,useOpenClosed as K}from'../../internal/open-closed.js';import{useResolveButtonType as R}from'../../hooks/use-resolve-button-type.js';var w=(n=>(n[n.Open=0]=\"Open\",n[n.Closed=1]=\"Closed\",n))(w||{});let x=Symbol(\"DisclosureContext\");function C(l){let r=P(x,null);if(r===null){let n=new Error(`<${l} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(n,C),n}return r}let B=Symbol(\"DisclosurePanelContext\");function H(){return P(B,null)}let A=y({name:\"Disclosure\",props:{as:{type:[Object,String],default:\"template\"},defaultOpen:{type:[Boolean],default:!1}},setup(l,{slots:r,attrs:n}){let d=`headlessui-disclosure-button-${I()}`,e=`headlessui-disclosure-panel-${I()}`,o=S(l.defaultOpen?0:1),i=S(null),s=S(null),u={buttonId:d,panelId:e,disclosureState:o,panel:i,button:s,toggleDisclosure(){o.value=h(o.value,{[0]:1,[1]:0})},closeDisclosure(){o.value!==1&&(o.value=1)},close(a){u.closeDisclosure();let c=(()=>a?a instanceof HTMLElement?a:a.value instanceof HTMLElement?p(a):p(u.button):p(u.button))();c==null||c.focus()}};return O(x,u),k(b(()=>h(o.value,{[0]:g.Open,[1]:g.Closed}))),()=>{let{defaultOpen:a,...c}=l,m={open:o.value===0,close:u.close};return v({theirProps:c,ourProps:{},slot:m,slots:r,attrs:n,name:\"Disclosure\"})}}}),G=y({name:\"DisclosureButton\",props:{as:{type:[Object,String],default:\"button\"},disabled:{type:[Boolean],default:!1}},setup(l,{attrs:r,slots:n,expose:d}){let e=C(\"DisclosureButton\"),o=H(),i=o===null?!1:o===e.panelId,s=S(null);d({el:s,$el:s}),i||T(()=>{e.button.value=s.value});let u=R(b(()=>({as:l.as,type:r.type})),s);function a(){var t;l.disabled||(i?(e.toggleDisclosure(),(t=p(e.button))==null||t.focus()):e.toggleDisclosure())}function c(t){var D;if(!l.disabled)if(i)switch(t.key){case f.Space:case f.Enter:t.preventDefault(),t.stopPropagation(),e.toggleDisclosure(),(D=p(e.button))==null||D.focus();break}else switch(t.key){case f.Space:case f.Enter:t.preventDefault(),t.stopPropagation(),e.toggleDisclosure();break}}function m(t){switch(t.key){case f.Space:t.preventDefault();break}}return()=>{let t={open:e.disclosureState.value===0},D=i?{ref:s,type:u.value,onClick:a,onKeydown:c}:{id:e.buttonId,ref:s,type:u.value,\"aria-expanded\":l.disabled?void 0:e.disclosureState.value===0,\"aria-controls\":p(e.panel)?e.panelId:void 0,disabled:l.disabled?!0:void 0,onClick:a,onKeydown:c,onKeyup:m};return v({ourProps:D,theirProps:l,slot:t,attrs:r,slots:n,name:\"DisclosureButton\"})}}}),J=y({name:\"DisclosurePanel\",props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0}},setup(l,{attrs:r,slots:n,expose:d}){let e=C(\"DisclosurePanel\");d({el:e.panel,$el:e.panel}),O(B,e.panelId);let o=K(),i=b(()=>o!==null?o.value===g.Open:e.disclosureState.value===0);return()=>{let s={open:e.disclosureState.value===0,close:e.close},u={id:e.panelId,ref:e.panel};return v({ourProps:u,theirProps:l,slot:s,attrs:r,slots:n,features:E.RenderStrategy|E.Static,visible:i.value,name:\"DisclosurePanel\"})}}});export{A as Disclosure,G as DisclosureButton,J as DisclosurePanel};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Index.vue?vue&type=style&index=0&id=f82b04ee&lang=scss&scoped=true\""],"sourceRoot":""}