{"version":3,"sources":["webpack:///./node_modules/lottie-web/build/player/lottie.js"],"names":["navigator","root","factory","window","svgNS","locationHref","initialDefaultFrame","subframeEnabled","expressionsPlugin","isSafari","test","userAgent","cachedColors","bm_rounder","Math","round","bm_rnd","bm_pow","pow","bm_sqrt","sqrt","bm_abs","abs","bm_floor","floor","bm_max","max","bm_min","min","blitter","BMMath","ProjectInterface","i","propertyNames","len","length","random","val","absArr","createSizedArray","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","type","currentTime","totalTime","frameMultiplier","this","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","s","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","toString","BaseEvent","prototype","triggerEvent","eventName","args","_cbs","addEventListener","callback","push","removeEventListener","bind","splice","createTypedArray","Uint8ClampedArray","Float32Array","Int16Array","value","arr","Array","apply","createNS","document","createElementNS","createTag","createElement","DynamicPropertyContainer","addDynamicProperty","prop","dynamicProperties","indexOf","container","_isAnimated","iterateDynamicProperties","_mdf","getValue","initDynamicPropertyContainer","getBlendMode","blendModeEnums","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","mode","Matrix","_cos","cos","_sin","sin","_tan","tan","_rnd","reset","props","rotate","angle","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","sy","skew","ax","ay","skewFromAxis","scale","sz","setTransform","a","c","e","j","k","l","m","n","o","translate","tx","ty","tz","transform","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","_identityCalculated","a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","isIdentity","_identity","equals","matr","clone","cloneFromProps","applyToPoint","x","y","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","pt1","pt2","pt3","p0","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","pool","math","global","startdenom","significance","overflow","ARC4","key","keylen","me","S","width","count","copy","slice","mixkey","seed","smear","stringseed","charCodeAt","tostring","String","fromCharCode","options","shortseed","flatten","obj","depth","result","typ","entropy","nodecrypto","out","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","Date","screen","autoseed","arc4","prng","int32","quick","double","pass","is_math_call","state","BezierFactory","ob","nm","str","replace","beziers","bezEasing","BezierEasing","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_mSampleValues","_precomputed","get","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","extendPrototype","sources","destination","sourcePrototype","attr","hasOwnProperty","getDescriptor","object","Object","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","bezier_length_pool","newElement","percents","lengths","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezier_segment_points","getSegmentsLength","shapeData","segmentsLength","segments_length_pool","closed","pathV","pathO","pathI","_length","totalLength","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataFunctionManager","completeLayers","layers","comps","fontManager","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","shapes","completeText","__used","JSON","parse","stringify","ks","it","path","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","chars","pathData","paths","data","__converted","checkColors","iterateShapes","checkShapes","cl","singleShape","moduleOb","__complete","dataManager","FontManager","emptyChar","w","size","combinedCharacters","setUpNode","font","family","parentNode","fontFamily","node","innerHTML","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","parent","createHelper","def","fontData","tHelper","setAttribute","fFamily","fStyle","fWeight","textContent","fClass","getContext","concat","Font","fonts","typekitLoaded","isLoaded","initTime","now","getCombinedCharacterCodes","addChars","found","ch","addFonts","defs","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","origin","querySelectorAll","href","rel","src","sc","helper","cache","checkLoadedFonts","getCharData","char","console","warn","getFontByName","name","fName","measureText","fontName","index","doubleSize","getComputedTextLength","singleSize","loadedCount","removeChild","PropertyFactory","initFrame","math_abs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","fnc","iterationIndex","lastIndex","keyframes","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","quaternionToEuler","omega","cosom","sinom","scale0","scale1","az","aw","bx","by","bz","bw","acos","slerp","createQuaternion","constructor","values","c3","s1","s2","s3","getValueAtCurrentTime","comp","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","processEffectsSequence","elem","globalData","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","ValueProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","st","KeyframedMultidimensionalProperty","arrLen","getProp","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","or","sk","sa","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v1","v2","frameRate","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","ShapePath","_maxLength","setPathData","setLength","point_pool","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","init","cnt","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","localShapeCollection","shape1","shape2","shapesEqual","shape_pool","releaseShapes","addShape","ShapeProperty","shapeCollection_pool","newShapeCollection","KeyframedShapeProperty","EllShapeProperty","cPoint","convertEllToPath","s0","_cw","_v","StarShapeProperty","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","os","rad","roundness","perimSegment","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","convertRectToPath","v0","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","RepeaterModifier","ShapeCollection","DashProperty","renderer","dataProps","dashStr","dashArray","dashoffset","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","initModifierProperties","addShapeToModifier","shape","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segments","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","release","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","pop","addPaths","newPaths","addSegment","shapePath","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","segment","rd","processPath","cloned_path","currentV","currentI","currentO","closerV","distance","newPosPerc","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","items","itemsTransform","cont","copies","ceil","group","reloadShapes","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","op","comparePoints","buildShapeString","pathNodes","_o","_i","shapeString","ImagePreloader","proxyImage","canvas","height","ctx","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","imagesLoadedCb","createImageData","assetData","assetsPath","original_path","imagePath","u","getAssetsPath","img","crossOrigin","_imageLoaded","loadAssets","cb","images","_createImageData","setPath","setAssetsPath","getImage","destroy","featureSupport","maskType","filtersFactory","createFilter","filId","fil","createAlphaToLuminanceFilter","feColorMatrix","assetLoader","formatResponse","xhr","response","responseText","load","errorCallback","XMLHttpRequest","open","responseType","err","send","onreadystatechange","readyState","status","TextAnimatorProperty","textData","renderType","_hasMaskedPath","_frameId","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","TextAnimatorDataProperty","animatorProps","defaultData","textAnimator_animatables","sw","fc","fh","fs","fb","TextSelectorProp","getTextSelectorProp","LetterProps","TextProperty","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","of","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","searchProperties","maskManager","getMaskProperty","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","mask","animators","matrixHelper","mHelper","renderedLettersCount","letters","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","currentLine","letterM","letterP","defaultPropsArray","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","isNewLine","getMult","anIndexes","totalChars","line","extra","an","animatorOffset","add","rot","atan","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","text","charCode","charactersArray","charAt","substr","newLineFlag","charData","anchorGrouping","currentSize","currentPos","lineWidth","maxLineWidth","styles","toLowerCase","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","animatorData","letterData","based","indexes","rn","newInd","currentInd","updateDocumentData","newData","undefined","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","_currentTextLength","finalS","finalE","xe","ne","textProperty","easer","tot","newCharsFlag","divisor","pool_factory","initialLength","_create","_release","_clone","pooling","cloned","shapeCollection","BaseRenderer","SVGRenderer","animationItem","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","maskElement","layerElement","renderConfig","preserveAspectRatio","imagePreserveAspectRatio","progressiveLoad","hideOnTransparent","viewBoxOnly","viewBoxSize","className","focusable","pendingElements","destroyed","rendererType","CanvasRenderer","clearCanvas","context","dpr","wrapper","devicePixelRatio","currentGlobalAlpha","contextData","CVContextData","transformMat","HybridRenderer","threeDElements","camera","supports3d","MaskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","layerId","maskRef","filterID","expan","lastPath","lastOperator","filterId","lastRadius","createLayerSolidPath","getShapeProp","invRect","drawPath","maskedElement","addRenderableComponent","HierarchyElement","FrameElement","TransformElement","RenderableElement","RenderableDOMElement","ProcessedElement","SVGStyleData","level","lvl","hd","pElem","msElem","SVGShapeData","transformers","caches","lStr","SVGTransformData","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","checkLayers","num","ip","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","Error","buildAllItems","includeLayers","newLayers","setProjectInterface","pInterface","projectInterface","initItems","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","searchExtraCompositions","xt","initExpressions","registerComposition","setupGlobalData","animData","fontsContainer","getAssetData","imageLoader","imagePreloader","fr","compSize","NullElement","SVGShapeElement","SVGTextElement","IImageElement","SVGCompElement","ISolidElement","configAnimation","maskId","updateContainerSize","appendElementInPos","setMatte","checkParenting","renderFrame","currentFrame","prepareFrame","getBaseElement","nextElement","insertBefore","hide","show","CVShapeElement","CVTextElement","CVImageElement","CVCompElement","CVSolidElement","ctxTransform","cProps","cTr","trProps","canvasContext","ctxOpacity","globalAlpha","cO","restore","save","actionFlag","cArrPos","duplicate","saved","savedOp","blendMode","popped","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","par","fillType","beginPath","closePath","clip","clearRect","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","HShapeElement","HTextElement","HCameraElement","HImageElement","HCompElement","HSolidElement","startPos","endPos","perspectiveElem","createThreeDContainer","webkitTransform","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","svg","setup","cWidth","cHeight","perspective","webkitPerspective","floatingContainer","isFirstFrame","finalMat","finalTransform","mProp","getMaskelement","pathString","pathShapeValue","initHierarchy","_isParent","prepareProperties","isVisible","initTransform","_matMdf","_opMdf","ao","renderTransform","globalToLocal","transforms","ptNew","initRenderable","isInRange","hidden","isTransparent","renderableComponents","component","removeRenderableComponent","prepareRenderableFrame","checkLayerLimits","checkTransparency","renderRenderable","sourceRectAtTime","getLayerSize","initElement","initBaseData","initRendererElement","createContainerElements","createRenderableComponents","createContent","baseElement","renderElement","renderInnerContent","innerElem","destroyBaseElement","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","stop","gf","cst","opacityId","opFill","ms","ost","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","dist","createRenderFunction","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","BaseElement","SVGBaseElement","IShapeElement","ITextElement","ICompElement","sourceRect","tm","_placeholder","textSpans","shapesData","stylesList","shapeModifiers","itemsData","processedElements","animatedContents","SVGTintFilter","filter","filterManager","matrixFilter","effectElements","feMergeNode","feMerge","SVGFillFilter","SVGGaussianBlurEffect","feGaussianBlur","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","feOffset","feFlood","feComposite","originalNodeAdded","sequence","processSequence","processSequences","getNewKey","checkMasks","layerInterface","LayerExpressionInterface","registerMaskInterface","effectsInterface","EffectsExpressionInterface","createEffectsInterface","registerEffectsInterface","compInterface","CompExpressionInterface","shapeInterface","ShapeExpressionInterface","content","textInterface","TextExpressionInterface","setBlendMode","blendModeValue","bm","sr","effectsManager","EffectsManager","getType","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","ln","cp","clipId","cpGroup","renderableEffectsManager","SVGEffects","addShapeToModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","lcEnum","ljEnum","searchProcessedElement","addProcessedElement","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","timeRemapped","setElements","elems","getElements","destroyElements","assetPath","pr","setAttributeNS","textContainer","buildTextContents","textArray","textContents","currentTextContent","tSpan","usesGlyphs","cachedSpansLength","tElement","justify","time","textBox","getBBox","bbox","renderedLetter","textSpan","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","lc","lj","ml","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","fn","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","colorBlack","colorWhite","opacity","sigma","dimensions","sigmaX","sigmaY","edgeMode","initialize","groupPath","elemChildren","children","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","call","outputDelta","inputDelta","join","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","ef","filters","CVBaseElement","CVMaskElement","hasMasks","stroke","fill","currentRender","sWidth","fValue","CVEffects","HBaseElement","shapesContainer","currentBBox","textPaths","isMasked","pe","_prevMat","HEffects","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","newLength","currentSavedOp","set","createElements","globalCompositeOperation","hideElement","showElement","forceRealStack","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","drawImage","parentMatrix","moveTo","lineTo","bezierCurveTo","transformHelper","dashResetter","preTransforms","co","wi","da","do","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","lastFill","lastStroke","lastStrokeW","checkBlendMode","tg","addEffects","backgroundColor","_createBaseContainerElements","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","bounds","shapeBoundingBox","xMax","right","yMax","bottom","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","currentBoxContains","box","changed","compW","compH","innerElemStyle","strokeWidth","lineHeight","tParent","tCont","textPath","margin","Image","imageElem","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","m_rotationX","m_rotationY","hasMatrixChanged","animationManager","registeredAnimations","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","animation","isPaused","subtractPlayingCount","registerAnimation","AnimationItem","setupAnimation","setData","addPlayingCount","activate","resume","nowTime","elapsedTime","advanceTime","first","loadAnimation","params","setParams","setSpeed","setDirection","play","pause","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","getElementsByTagName","div","resize","goToAndStop","isFrame","freeze","unfreeze","getRegisteredAnimations","animations","currentRawFrame","frameMult","playSpeed","playDirection","playCount","autoplay","loop","animationID","timeCompleted","segmentPos","_idle","_completedLoop","animType","rendererSettings","parseInt","autoloadSegments","lastIndexOf","fileName","trigger","wrapperAttributes","attributes","getNamedItem","prerender","completeData","loadNextSegment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","updaFrameModifier","waitForFontsLoaded","error","triggerConfigError","gotoFrame","setSubframe","triggerRenderFrameError","setCurrentRawFrameValue","frameModifier","goToAndPlay","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","end","pendingFrame","playSegments","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onComplete","onSegmentStart","onDestroy","getPath","getDuration","onError","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","ExpressionManager","$bm_isInstanceOfArray","isNumerable","tOfV","Number","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","sum","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","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","needsVelocity","_needsRandom","elemType","$bm_transform","effect","thisProperty","valueAtTime","defineProperty","frameDuration","displayStartTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","__expression_functions","scoped_bm_rt","xf","eval","expression_function","numKeys","active","wiggle","freq","amp","addedAmps","periods","loopInDuration","duration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","nearestKey","framesToTime","frames","fps","timeToFrames","seedRandom","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","_value","frameExpressionId","expressionHelpers","searchExpressions","getSpeedAtTime","speed","_cachingAtTime","getStaticValueAtTime","setGroupProperty","propertyGroup","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","getTransformStaticValueAtTime","propertyGetProp","propertyIndex","ix","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","propertyGetShapeProp","trims","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","iterateElements","view","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","pathInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","interfaceFunction","interfaces","_name","mn","numProperties","cix","contentsInterfaceFactory","transformInterface","_propertyGroup","skewAxis","defineProperties","ExpressionPropertyInterface","transformInterfaceFactory","np","_dashPropertyGroup","dashOb","addPropertyToDashOb","start","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","_sourceText","_thisLayerFunction","stringValue","_prevValue","toWorldMat","sampleImage","anchorPointDescriptor","TransformExpressionInterface","anchor_point","startTime","source","MaskManagerInterface","effects","pixelAspect","numLayers","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_transformFactory","compositions","_thisProjectFunction","createGroupInterface","createValueInterface","groupInterface","enabled","en","expressionProperty","effectsData","MaskInterface","_mask","_data","_masksInterfaces","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","assign","speedAtTime","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TextExpressionSelectorProp","propertyGetTextProp","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","effectItem","GroupEffect","getValueProxy","total","eff","lottie","setLocationHref","setSubframeRendering","setQuality","isNaN","inBrowser","installPlugin","plugin","getFactory","checkReady","clearInterval","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","__getFactory","version","scripts","myScript","setInterval"],"mappings":"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","file":"ea88be26-987238832641680470a8.js","sourcesContent":["require(\"core-js/modules/es.typed-array.sort.js\");\n\ntypeof navigator !== \"undefined\" && function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(function () {\n return factory(root);\n });\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory(root);\n } else {\n root.lottie = factory(root);\n root.bodymovin = root.lottie;\n }\n}(window || {}, function (window) {\n \"use strict\";\n\n var svgNS = \"http://www.w3.org/2000/svg\";\n var locationHref = '';\n var initialDefaultFrame = -999999;\n var subframeEnabled = true;\n var expressionsPlugin;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var cachedColors = {};\n var bm_rounder = Math.round;\n var bm_rnd;\n var bm_pow = Math.pow;\n var bm_sqrt = Math.sqrt;\n var bm_abs = Math.abs;\n var bm_floor = Math.floor;\n var bm_max = Math.max;\n var bm_min = Math.min;\n var blitter = 10;\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 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() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = typeof val;\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i,\n 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 if (flag) {\n bm_rnd = Math.round;\n } else {\n bm_rnd = function bm_rnd(val) {\n return val;\n };\n }\n }\n\n roundValues(false);\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 = element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = element.style.webkitTransformStyle = 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 this.currentTime = currentTime;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n return '__lottie_element_' + ++_count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r, g, b, i, f, p, q, 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\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b),\n d = max - min,\n h,\n s = max === 0 ? 0 : d / max,\n 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\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 function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var len = this._cbs[eventName].length;\n\n for (var i = 0; i < len; i++) {\n this._cbs[eventName][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 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 createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0,\n arr = [],\n 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 createTypedArray(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n } else if (type === 'int16') {\n return new Int16Array(len);\n } else if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArray;\n } else {\n return createRegularArray;\n }\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function createNS(type) {\n //return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function createTag(type) {\n //return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function DynamicPropertyContainer() {}\n\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 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 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 /*!\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\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] = _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\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 len = pts.length,\n 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 p1 = this.props[1],\n p4 = this.props[4],\n p5 = this.props[5],\n p12 = this.props[12],\n 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 /*\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\n\n (function (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 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 })([], // pool: entropy pool starts empty\n BMMath // math: package containing random, pow, and seedrandom\n );\n\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 if (mX1 !== mY1 || mX2 !== mY2) this._calcSampleValues();\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 } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n };\n return ob;\n }();\n\n (function () {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n })();\n\n function extendPrototype(sources, destination) {\n var i,\n len = sources.length,\n sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (sourcePrototype.hasOwnProperty(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 function bezFunction() {\n var easingFunctions = [];\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 = defaultCurveSegments;\n var k;\n var i, len;\n var ptCoord,\n perc,\n addedLength = 0;\n var ptDistance;\n var point = [],\n lastPoint = [];\n var lengthData = bezier_length_pool.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 = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bm_pow(perc, 2) * pt4[i] + bm_pow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bm_sqrt(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 = segments_length_pool.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 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 = defaultCurveSegments;\n var k, i, len;\n var ptCoord,\n perc,\n addedLength = 0;\n var ptDistance;\n var point,\n 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 = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bm_pow(perc, 2) * (pt2[i] + pt4[i]) + bm_pow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bm_sqrt(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 = bm_floor((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 } else {\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\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u0 = 1;\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 function getSegmentArray() {}\n\n var bezier_segment_points = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n startPerc = startPerc < 0 ? 0 : startPerc > 1 ? 1 : startPerc;\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i,\n 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;\n var t0t0u0_3 = t0 * t0 * u0 * 3;\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;\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1;\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;\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1;\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;\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1;\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezier_segment_points[i * 4] = Math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 1] = Math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 2] = Math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 3] = Math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000;\n }\n\n return bezier_segment_points;\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 function dataFunctionManager() {\n //var tCanvasHelper = createTag('canvas').getContext('2d');\n function completeLayers(layers, comps, fontManager) {\n var layerData;\n var animArray, lastFrame;\n var i,\n len = layers.length;\n var j, jLen, k, kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (!('ks' in layerData) || layerData.completed) {\n continue;\n }\n\n layerData.completed = true;\n\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n\n animArray = [];\n lastFrame = -1;\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, fontManager);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty == 5) {\n completeText(layerData, fontManager);\n }\n }\n }\n\n function findCompLayers(id, comps) {\n var i = 0,\n len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n if (!comps[i].layers.__used) {\n comps[i].layers.__used = true;\n return comps[i].layers;\n }\n\n return JSON.parse(JSON.stringify(comps[i].layers));\n }\n\n i += 1;\n }\n }\n\n function completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\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\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n /*if(hasPaths){\r\n //mx: distance\r\n //ss: sensitivity\r\n //dc: decay\r\n arr.splice(arr.length-1,0,{\r\n \"ty\": \"ms\",\r\n \"mx\":20,\r\n \"ss\":10,\r\n \"dc\":0.001,\r\n \"maxDist\":200\r\n });\r\n }*/\n\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i,\n 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 } else if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n } else if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n } else if (animVersion[2] > minimum[2]) {\n return false;\n }\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 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 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 len = animationData.chars.length,\n j,\n jLen,\n k,\n kLen;\n var pathData, paths;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.chars[i].data && animationData.chars[i].data.shapes) {\n paths = animationData.chars[i].data.shapes[0].it;\n jLen = paths.length;\n\n for (j = 0; j < jLen; j += 1) {\n pathData = paths[j].ks.k;\n\n if (!pathData.__converted) {\n convertPathsToAbsoluteValues(paths[j].ks.k);\n pathData.__converted = true;\n }\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 len = shapes.length;\n var j, 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 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 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 completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\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\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i,\n len = layers.length;\n var j, jLen, k, 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 completeShapes(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 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, fontManager) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets, fontManager);\n animationData.__complete = true; //blitAnimation(animationData, animationData.assets, fontManager);\n }\n\n function completeText(data, fontManager) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n var dataManager = dataFunctionManager();\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: []\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\n function setUpNode(font, family) {\n var parentNode = createTag('span');\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerHTML = '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 = font + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i,\n len = this.fonts.length;\n var node, w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n continue;\n }\n\n 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.checkLoadedFonts.bind(this), 20);\n } else {\n setTimeout(function () {\n this.isLoaded = true;\n }.bind(this), 0);\n }\n }\n\n function createHelper(def, fontData) {\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', fontData.fStyle);\n tHelper.setAttribute('font-weight', fontData.fWeight);\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 var tCanvasHelper = createTag('canvas').getContext('2d');\n tCanvasHelper.font = fontData.fWeight + ' ' + fontData.fStyle + ' 100px ' + fontData.fFamily; //tCanvasHelper.font = ' 100px '+ fontData.fFamily;\n\n return tHelper;\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 var fontArr = fontData.list;\n var i,\n 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.innerHTML = \"@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++) {\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++) {\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(defs, fontArr[i]);\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 len = chars.length;\n var j,\n jLen = this.chars.length,\n 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 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) {\n console.warn('Missing character from exported characters list: ', char, style, font);\n }\n\n return emptyChar;\n }\n\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var index = char.charCodeAt(0);\n\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper; //Canvas version\n //fontData.cache[index] = tHelper.measureText(char).width / 100;\n //SVG version\n //console.log(tHelper.getBBox().width)\n\n if (char === ' ') {\n tHelper.textContent = '|' + char + '|';\n var doubleSize = tHelper.getComputedTextLength();\n tHelper.textContent = '||';\n var singleSize = tHelper.getComputedTextLength();\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n tHelper.textContent = char;\n fontData.cache[index + 1] = tHelper.getComputedTextLength() / 100;\n }\n }\n\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0,\n 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 getCombinedCharacterCodes() {\n return combinedCharacters;\n }\n\n function loaded() {\n return this.isLoaded;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this.initTime = Date.now();\n }; //TODO: for now I'm adding these methods to the Class and not the prototype. Think of a better way to implement it. \n\n\n Font.getCombinedCharacterCodes = getCombinedCharacterCodes;\n Font.prototype.addChars = addChars;\n Font.prototype.addFonts = addFonts;\n Font.prototype.getCharData = getCharData;\n Font.prototype.getFontByName = getFontByName;\n Font.prototype.measureText = measureText;\n Font.prototype.checkLoadedFonts = checkLoadedFonts;\n Font.prototype.loaded = loaded;\n return Font;\n }();\n\n var PropertyFactory = function () {\n var initFrame = initialDefaultFrame;\n var math_abs = 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 flag = true;\n var keyData, nextKeyData;\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 var k, kLen, perc, jLen, j, fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyData.bezierData) {\n keyData.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyData.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 (keyData.__fnct) {\n fnc = keyData.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyData.__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, outY, inX, inY, 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 (!keyData.__fnct) {\n keyData.__fnct = [];\n }\n\n if (!keyData.__fnct[i]) {\n outX = typeof keyData.o.x[i] === 'undefined' ? keyData.o.x[0] : keyData.o.x[i];\n outY = typeof keyData.o.y[i] === 'undefined' ? keyData.o.y[0] : keyData.o.y[i];\n inX = typeof keyData.i.x[i] === 'undefined' ? keyData.i.x[0] : keyData.i.x[i];\n inY = typeof keyData.i.y[i] === 'undefined' ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.__fnct[i] = fnc;\n } else {\n fnc = keyData.__fnct[i];\n }\n } else {\n if (!keyData.__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.__fnct = fnc;\n } else {\n fnc = keyData.__fnct;\n }\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 ay = a[1],\n az = a[2],\n aw = a[3],\n bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, 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 (math_abs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0,\n len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (math_abs(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 multipliedValue;\n var i,\n 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 len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n var arr = 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.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 len = data.k.length;\n var s, e, to, 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.keyframes = data.k;\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 }\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 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 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 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 py = this.py,\n frameRate;\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 v1 = v2 = defaultVector;\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 } else {\n return;\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 len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = 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 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] = point_pool.newElement();\n this.o[i] = point_pool.newElement();\n this.i[i] = point_pool.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\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = point_pool.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 outPoints = this.o,\n 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 ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS, keyPropE, isHold, j, k, jLen, kLen, perc, 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 flag = true,\n keyData,\n nextKeyData;\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 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 (keyData.__fnct) {\n fnc = keyData.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyData.__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 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 = shape_pool.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 } else 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 = this.kf ? this.pv : this.data.ks ? this.data.ks.k : this.data.pt.k;\n var i,\n 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 ;\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 = shape_pool.clone(pathData);\n this.pv = shape_pool.clone(this.v);\n this.localShapeCollection = shapeCollection_pool.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.k = true;\n this.kf = true;\n var i,\n len = this.keyframes[0].s[0].i.length;\n var jLen = this.keyframes[0].s[0].i[0].length;\n this.v = shape_pool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shape_pool.clone(this.v);\n this.localShapeCollection = shapeCollection_pool.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 EllShapeProperty(elem, data) {\n /*this.v = {\r\n v: createSizedArray(4),\r\n i: createSizedArray(4),\r\n o: createSizedArray(4),\r\n c: true\r\n };*/\n this.v = shape_pool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollection_pool.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 ;\n EllShapeProperty.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 p1 = this.p.v[1],\n s0 = this.s.v[0] / 2,\n 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], EllShapeProperty);\n return EllShapeProperty;\n }();\n\n var StarShapeProperty = function () {\n function StarShapeProperty(elem, data) {\n this.v = shape_pool.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 = shapeCollection_pool.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 ;\n StarShapeProperty.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 rad,\n roundness,\n perimSegment,\n 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 currentAng = -Math.PI / 2;\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], StarShapeProperty);\n return StarShapeProperty;\n }();\n\n var RectShapeProperty = function () {\n function RectShapeProperty(elem, data) {\n this.v = shape_pool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollection_pool.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 ;\n RectShapeProperty.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0],\n p1 = this.p.v[1],\n v0 = this.s.v[0] / 2,\n v1 = this.s.v[1] / 2;\n var round = bm_min(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(frameNum) {\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], RectShapeProperty);\n return RectShapeProperty;\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 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: shapeCollection_pool.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 len = segments.length,\n 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) {} else {\n var shapeS, 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 len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segments_length_pool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s, 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 s = (this.s.v > 1 ? 1 : this.s.v < 0 ? 0 : this.s.v) + o;\n e = (this.e.v > 1 ? 1 : this.e.v < 0 ? 0 : this.e.v) + o;\n\n if (s === e) {}\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 len = this.shapes.length,\n j,\n jLen;\n var pathsData,\n pathData,\n totalShapeLength,\n 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 } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [],\n shapeData,\n 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 shapeE = e,\n addedLength = 0,\n 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 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 len = shapeData.shape.paths._length,\n j,\n jLen;\n var addedLength = 0;\n var currentLengthData, segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shape_pool.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 = shape_pool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\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 cloned_path = shape_pool.newElement();\n cloned_path.c = path.c;\n var i,\n len = path._length;\n var currentV,\n currentI,\n currentO,\n closerV,\n newV,\n newO,\n newI,\n distance,\n newPosPerc,\n index = 0;\n var vX, vY, oX, oY, iX, 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 cloned_path.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /*cloned_path.v[index] = currentV;\r\n cloned_path.o[index] = currentO;\r\n cloned_path.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 vX = iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vY = iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n cloned_path.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 vX = oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vY = oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n cloned_path.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 cloned_path;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData, newPaths, localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n newPaths = shapeData.shape.paths;\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 ShapeModifiers.registerModifier('rd', RoundCornersModifier);\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 var cont = 0;\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 cont += 1;\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 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 i,\n len = elements.length;\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 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, itemsTransform, i, dir, cont;\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 }\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 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 k;\n var tMat = this.tr.v.props;\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, 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.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\n RepeaterModifier.prototype.addShape = function () {};\n\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\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 shape_pool.release(this.shapes[i]);\n }\n\n this._length = 0;\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 len = data.length || 0,\n 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 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 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 len = this.o.length / 2,\n 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 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 len = this.data.p * 4;\n var mult, 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 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 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 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) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, original_path) {\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 = original_path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function createImageData(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.bind(this), 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 loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i,\n len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\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 getImage(assetData) {\n var i = 0,\n 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\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loaded() {\n return this.totalImages === this.loadedAssets;\n }\n\n return function ImagePreloader() {\n this.loadAssets = loadAssets;\n this.setAssetsPath = setAssetsPath;\n this.setPath = setPath;\n this.loaded = loaded;\n this.destroy = destroy;\n this.getImage = getImage;\n this._createImageData = createImageData;\n this._imageLoaded = imageLoaded;\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.loadedAssets = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n };\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 filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\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 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 assetLoader = function () {\n function formatResponse(xhr) {\n if (xhr.response && typeof xhr.response === 'object') {\n return xhr.response;\n } else if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n } else if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n }\n\n function loadAsset(path, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true); // 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) {}\n\n xhr.send();\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\n return {\n load: loadAsset\n };\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 len = this._textData.a.length,\n 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 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: this._textData.p.r,\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 data = this.data;\n var xPos, yPos;\n var i, len;\n var letters = documentData.l,\n pathInfo,\n currentLength,\n currentPoint,\n segmentLength,\n flag,\n pointInd,\n segmentInd,\n prevPoint,\n points,\n segments,\n partialLength,\n totalLength,\n perc,\n tanAngle,\n 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) {\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, animatorSelector;\n var j, jLen;\n var letterValue;\n jLen = animators.length;\n var lastLetter;\n var mult,\n ind = -1,\n offf,\n xPathPos,\n yPathPos;\n var initPathPos = currentLength,\n initSegmentInd = segmentInd,\n initPointInd = pointInd,\n currentLine = -1;\n var elemOpacity;\n var sc, sw, fc, k;\n var lineLength = 0;\n var letterSw,\n letterSc,\n letterFc,\n letterM = '',\n letterP = this.defaultPropsArray,\n 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 lineLength = 0;\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 letterO = letterSw = letterFc = letterM = '';\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\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 / 200;\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;\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 / 200, -(alignment[1] * yOff / 100));\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 / 200, -alignment[1] * yOff / 100, 0);\n }\n\n lineLength += letters[i].l / 2;\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 {\n if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n }\n\n lineLength += letters[i].l / 2;\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] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] = 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] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] = 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 {\n 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\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 / 100 + yPos, 0);\n\n if (textData.p.p) {\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 / 200;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr / 1000 * 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\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an / 200, alignment[1] * yOff / 100, 0);\n xPos += letters[i].l + documentData.tr / 1000 * 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 TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimator_animatables = animatorProps.a;\n this.a = {\n r: textAnimator_animatables.r ? getProp(elem, textAnimator_animatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimator_animatables.rx ? getProp(elem, textAnimator_animatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimator_animatables.ry ? getProp(elem, textAnimator_animatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimator_animatables.sk ? getProp(elem, textAnimator_animatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimator_animatables.sa ? getProp(elem, textAnimator_animatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimator_animatables.s ? getProp(elem, textAnimator_animatables.s, 1, 0.01, container) : defaultData,\n a: textAnimator_animatables.a ? getProp(elem, textAnimator_animatables.a, 1, 0, container) : defaultData,\n o: textAnimator_animatables.o ? getProp(elem, textAnimator_animatables.o, 0, 0.01, container) : defaultData,\n p: textAnimator_animatables.p ? getProp(elem, textAnimator_animatables.p, 1, 0, container) : defaultData,\n sw: textAnimator_animatables.sw ? getProp(elem, textAnimator_animatables.sw, 0, 0, container) : defaultData,\n sc: textAnimator_animatables.sc ? getProp(elem, textAnimator_animatables.sc, 1, 0, container) : defaultData,\n fc: textAnimator_animatables.fc ? getProp(elem, textAnimator_animatables.fc, 1, 0, container) : defaultData,\n fh: textAnimator_animatables.fh ? getProp(elem, textAnimator_animatables.fh, 0, 0, container) : defaultData,\n fs: textAnimator_animatables.fs ? getProp(elem, textAnimator_animatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimator_animatables.fb ? getProp(elem, textAnimator_animatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimator_animatables.t ? getProp(elem, textAnimator_animatables.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 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 (data.hasOwnProperty(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 multipliedValue;\n var i,\n 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.pv = this.v = this.currentData;\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 textDocumentData;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0,\n len = textKeys.length;\n\n while (i <= len - 1) {\n textDocumentData = textKeys[i].s;\n\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 combinedCharacters = FontManager.getCombinedCharacterCodes();\n var charactersArray = [];\n var i = 0,\n len = text.length;\n var charCode;\n\n while (i < len) {\n charCode = text.charCodeAt(i);\n\n if (combinedCharacters.indexOf(charCode) !== -1) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else {\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n charCode = text.charCodeAt(i + 1);\n\n if (charCode >= 0xDC00 && charCode <= 0xDFFF) {\n charactersArray.push(text.substr(i, 2));\n ++i;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else {\n charactersArray.push(text.charAt(i));\n }\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, len;\n var newLineFlag,\n index = 0,\n val;\n var anchorGrouping = data.m.g;\n var currentSize = 0,\n currentPos = 0,\n currentLine = 0,\n lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j, jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData,\n cLength = 0;\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal',\n fStyle = 'normal';\n len = styles.length;\n var styleName;\n\n for (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 }\n\n documentData.fWeight = fontData.fWeight || fWeight;\n documentData.fStyle = fStyle;\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, 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 (currentChar === ' ') {\n val = \"\\xA0\";\n } else 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 = documentData.finalText[i];\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 currentSize += cLength;\n\n if (val === '' || val === \"\\xA0\" || i === len - 1) {\n if (val === '' || val === \"\\xA0\") {\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 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 animatorData,\n letterData;\n jLen = animators.length;\n var based,\n ind,\n 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 !== \"\\xA0\" || based == 3 && (letterData.n || letterData.val == \"\\xA0\" || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\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 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 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 TextSelectorProp(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.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorProp.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n } //var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\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;\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 }\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], TextSelectorProp);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorProp(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n var pool_factory = function () {\n return function (initialLength, _create, _release, _clone) {\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 = _maxLength * 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n function clone() {\n var clonedElement = newElement();\n return _clone(clonedElement);\n }\n\n return ob;\n };\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 point_pool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return pool_factory(8, create);\n }();\n\n var shape_pool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length,\n i;\n\n for (i = 0; i < len; i += 1) {\n point_pool.release(shapePath.v[i]);\n point_pool.release(shapePath.i[i]);\n point_pool.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 len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n var pt;\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 = pool_factory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n var shapeCollection_pool = 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 len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shape_pool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var segments_length_pool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i,\n len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezier_length_pool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return pool_factory(8, create, release);\n }();\n\n var bezier_length_pool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', defaultCurveSegments),\n lengths: createTypedArray('float32', defaultCurveSegments)\n };\n }\n\n return pool_factory(8, create);\n }();\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i,\n len = this.layers.length,\n data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i--) {\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 13:\n return this.createCamera(layer);\n }\n\n return this.createNull(layer);\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.buildAllItems = function () {\n var i,\n 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 len = newLayers.length;\n var j,\n 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 len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\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 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.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.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 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 progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: config && config.hideOnTransparent === false ? false : true,\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 };\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([BaseRenderer], SVGRenderer);\n\n SVGRenderer.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createText = function (data) {\n return new SVGTextElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRenderer.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 }\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(\" + locationHref + \"#\" + maskId + \")\");\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRenderer.prototype.destroy = function () {\n this.animationItem.wrapper.innerHTML = '';\n this.layerElement = null;\n this.globalData.defs = null;\n var i,\n len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i++) {\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 SVGRenderer.prototype.updateContainerSize = function () {};\n\n SVGRenderer.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 (expressionsPlugin) {\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 SVGRenderer.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 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 SVGRenderer.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 len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i--) {\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 SVGRenderer.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 SVGRenderer.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRenderer.prototype.show = function () {\n this.layerElement.style.display = 'block';\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 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], CanvasRenderer);\n\n CanvasRenderer.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRenderer.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 CanvasRenderer.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 CanvasRenderer.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRenderer.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 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 CanvasRenderer.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 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 CanvasRenderer.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n this.animationItem.container.style.width = '100%';\n this.animationItem.container.style.height = '100%'; //this.animationItem.container.style.transform = 'translate3d(0,0,0)';\n //this.animationItem.container.style.webkitTransform = 'translate3d(0,0,0)';\n\n this.animationItem.container.style.transformOrigin = this.animationItem.container.style.mozTransformOrigin = this.animationItem.container.style.webkitTransformOrigin = this.animationItem.container.style['-webkit-transform'] = \"0px 0px 0px\";\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 CanvasRenderer.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth, 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, 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 CanvasRenderer.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 len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i++) {\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 CanvasRenderer.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 CanvasRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRenderer.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRenderer.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\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 ? false : true\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], HybridRenderer);\n HybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRenderer.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, nextLayer, 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 {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRenderer.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 HybridRenderer.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRenderer.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRenderer.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 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 HybridRenderer.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 HybridRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRenderer.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0,\n 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\n HybridRenderer.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n perspectiveElem.style.width = this.globalData.compSize.w + 'px';\n perspectiveElem.style.height = this.globalData.compSize.h + 'px';\n perspectiveElem.style.transformOrigin = perspectiveElem.style.mozTransformOrigin = perspectiveElem.style.webkitTransformOrigin = \"50% 50%\";\n container.style.transform = container.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\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 HybridRenderer.prototype.build3dContainers = function () {\n var i,\n 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--) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRenderer.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0,\n 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 HybridRenderer.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n resizerElem.style.width = animData.w + 'px';\n resizerElem.style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n resizerElem.style.transformStyle = resizerElem.style.webkitTransformStyle = resizerElem.style.mozTransformStyle = \"flat\";\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n resizerElem.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 HybridRenderer.prototype.destroy = function () {\n this.animationItem.wrapper.innerHTML = '';\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i,\n len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i++) {\n this.elements[i].destroy();\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRenderer.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, sy, tx, 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 this.resizerElem.style.transform = this.resizerElem.style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n };\n\n HybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRenderer.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRenderer.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRenderer.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 len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n this.threeDElements[i].perspectiveElem.style.perspective = this.threeDElements[i].perspectiveElem.style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n }\n }\n };\n\n HybridRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n 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 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 len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path,\n properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j, jLen;\n var layerId = createElementID();\n var rect, expansor, feMorph, x;\n var maskType = 'clipPath',\n maskRef = 'clip-path';\n\n for (i = 0; i < len; i++) {\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 continue;\n }\n\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(' + locationHref + '#' + 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 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(\" + locationHref + \"#\" + 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 len = this.masksProperties.length;\n\n for (i = 0; i < len; i++) {\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(' + locationHref + '#' + 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, 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 /**\r\n * @file \r\n * Handles AE's layer parenting property.\r\n *\r\n */\n\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 /**\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\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 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 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 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 len = transforms.length,\n 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 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 {\n if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n }\n },\n renderRenderable: function renderRenderable() {\n var i,\n 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 } else {\n return {\n w: this.data.width,\n h: this.data.height\n };\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 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 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 ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\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 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 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 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 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 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, j, 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(' + locationHref + '#' + 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, j, 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(' + locationHref + '#' + opacityId + ')');\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 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 var ty = data.ty;\n\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 }\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 renderPath(styleData, itemData, isFirstFrame) {\n var j,\n jLen,\n pathStringTransformed,\n redraw,\n pathNodes,\n l,\n lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths, mat, props, iterations, 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--;\n k--;\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--;\n k--;\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(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(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 ;\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 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, i, len, 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 >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;\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 ;\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(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(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 ;\n return ob;\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 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 len = sequence.transforms.length,\n _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 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 return '_' + this.transform_key_count++;\n }\n };\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 len = styles.length,\n 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 BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0,\n 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 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 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, fil, gg;\n\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha');\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 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(' + locationHref + '#' + filId + ')');\n }\n } else if (this.data.td == 2) {\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(' + locationHref + '#' + 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(' + locationHref + '#' + 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(' + locationHref + '#' + 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(\" + locationHref + \"#\" + id + \")\");\n }\n };\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i,\n 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 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 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\n for (i = len - 1; i >= 0; i -= 1) {\n this.shapeModifiers[i].processShapes(this._isFirstFrame);\n }\n },\n lcEnum: {\n '1': 'butt',\n '2': 'round',\n '3': 'square'\n },\n ljEnum: {\n '1': 'miter',\n '2': 'round',\n '3': 'bevel'\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0,\n 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 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 jLen = shapes.length;\n var k, kLen, pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\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\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 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 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 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 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 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 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 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) : []; //this.layerElement = createNS('g');\n\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([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);\n\n function SVGTextElement(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], SVGTextElement);\n\n SVGTextElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextElement.prototype.buildTextContents = function (textArray) {\n var i = 0,\n len = textArray.length;\n var textContents = [],\n 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 SVGTextElement.prototype.buildNewText = function () {\n var i, 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 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 shapes,\n shapeStr = '',\n singleShape = this.data.singleShape;\n var xPos = 0,\n yPos = 0,\n firstLine = true;\n var trackingOffset = documentData.tr / 1000 * 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\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] || 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 this.textSpans[i] = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var shapeData, charData;\n\n for (i = 0; i < len; i += 1) {\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i] : createNS(usesGlyphs ? 'path' : '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] = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\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 shapeData = charData && charData.data || {};\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n\n if (!singleShape) {\n tSpan.setAttribute('d', this.createPathShape(matrixHelper, shapes));\n } else {\n shapeStr += this.createPathShape(matrixHelper, shapes);\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].style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextElement.prototype.sourceRectAtTime = function (time) {\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 SVGTextElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i, len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter, textSpan;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i];\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 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 len = this.shapes.length,\n shape;\n var j,\n jLen = this.stylesList.length;\n var style,\n count = 0;\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 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(' + locationHref + '#' + elementData.maskId + ')');\n }\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round');\n pathElement.setAttribute('stroke-linejoin', this.ljEnum[data.lj] || 'round');\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 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 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 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 len = arr.length - 1;\n var j, jLen;\n var ownStyles = [],\n ownModifiers = [],\n styleOb,\n currentTransform,\n modifier,\n 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') {\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 container.appendChild(itemsData[i].style.pElem);\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 container.appendChild(itemsData[i].gr);\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') {\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 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 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 SVGTintFilter(filter, filterManager) {\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', 'f1');\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', 'f2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n\n if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {\n var feMerge = createNS('feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n feMerge.appendChild(feMergeNode);\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'f2');\n feMerge.appendChild(feMergeNode);\n }\n }\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) {\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 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 SVGGaussianBlurEffect(filter, filterManager) {\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 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;\n var sigmaY = dimensions == 2 ? 0 : sigma;\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';\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function SVGStrokeEffect(elem, filterManager) {\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, groupPath, i, 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(' + locationHref + '#' + 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 len = this.paths.length;\n var mask, path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m === -1) {\n continue;\n }\n\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) / 100;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) / 100;\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 / 100;\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 / 100 + ' ';\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 / 100;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\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(' + bm_floor(color[0] * 255) + ',' + bm_floor(color[1] * 255) + ',' + bm_floor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager) {\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', 'f1');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\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 }\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); //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 SVGProLevelsFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer');\n var feFuncR, feFuncG, feFuncB;\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 }\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 }\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 }\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 }\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n feComponentTransfer = createNS('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.setAttribute('color-interpolation-filters', 'sRGB');\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 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, cnt, perc, bezier;\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) {\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '400%');\n filter.setAttribute('height', '400%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', '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', 'drop_shadow_1');\n feOffset.setAttribute('result', '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', 'drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', 'drop_shadow_3');\n feComposite.setAttribute('in2', 'drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', 'drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = createNS('feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = createNS('feMergeNode');\n feMerge.appendChild(feMergeNode);\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n this.feMergeNode = feMergeNode;\n this.feMerge = feMerge;\n this.originalNodeAdded = false;\n feMerge.appendChild(feMergeNode);\n }\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 /*if(forceRender || this.filterManager.effectElements[5].p._mdf){\r\n if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n this.feMerge.removeChild(this.feMergeNode);\r\n this.originalNodeAdded = false;\r\n } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n this.feMerge.appendChild(this.feMergeNode);\r\n this.originalNodeAdded = true;\r\n }\r\n }*/\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 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 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 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 SVGEffects(elem) {\n var i,\n len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n\n if (elem.data.ef[i].ty === 20) {\n count += 1;\n filterManager = new SVGTintFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 21) {\n count += 1;\n filterManager = new SVGFillFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 22) {\n filterManager = new SVGStrokeEffect(elem, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 23) {\n count += 1;\n filterManager = new SVGTritoneFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 24) {\n count += 1;\n filterManager = new SVGProLevelsFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 25) {\n count += 1;\n filterManager = new SVGDropShadowEffect(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 28) {\n //count += 1;\n filterManager = new SVGMatte3Effect(fil, elem.effectsManager.effectElements[i], elem);\n } else if (elem.data.ef[i].ty === 29) {\n count += 1;\n filterManager = new SVGGaussianBlurEffect(fil, elem.effectsManager.effectElements[i]);\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(' + locationHref + '#' + 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 len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\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 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 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 CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getImage(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, 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 (parentMatrix) {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\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([CanvasRenderer, 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 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 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 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 len = this.masksProperties.length,\n hasMasks = false;\n\n for (i = 0; i < len; i++) {\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 len = this.masksProperties.length;\n var pt, pts, data;\n ctx.beginPath();\n\n for (i = 0; i < len; i++) {\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 jLen = data._length;\n\n for (j = 1; j < jLen; j++) {\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 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(' + bm_floor(elementData.c.v[0]) + ',' + bm_floor(elementData.c.v[1]) + ',' + bm_floor(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 = this.lcEnum[data.lc] || 'round';\n styleElem.lj = this.ljEnum[data.lj] || 'round';\n\n if (data.lj == 1) {\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 (data) {\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 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 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 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 len = styles.length,\n j,\n jLen;\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 len = arr.length - 1;\n var j, jLen;\n var ownStyles = [],\n ownModifiers = [],\n processedPos,\n modifier,\n 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') {\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 var props, groupMatrix;\n\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 len = this.stylesList.length;\n var j,\n jLen,\n k,\n kLen,\n elems,\n nodes,\n renderer = this.globalData.renderer,\n ctx = this.globalData.canvasContext,\n type,\n 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 continue;\n }\n\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 CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i,\n 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 len,\n j,\n 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 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(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(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\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 grd;\n var pt1 = itemData.s.v,\n 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 >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;\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 var grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i,\n 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(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(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 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 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, 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 shapeData,\n k,\n kLen,\n shapes,\n j,\n jLen,\n pathNodes,\n commands,\n pathArr,\n singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var xPos = 0,\n yPos = 0,\n 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);\n\n for (j = 0; j < jLen; j += 1) {\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[j] = pathArr;\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 var finalMat = this.finalTransform.mat.props;\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, len, j, jLen, k, 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 lastStroke = null,\n lastStrokeW = null,\n commands,\n pathArr;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\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 function CVEffects() {}\n\n CVEffects.prototype.renderFrame = function () {};\n\n function HBaseElement(data, globalData, comp) {}\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 if (this.finalTransform._matMdf) {\n this.transformedElement.style.transform = this.transformedElement.style.webkitTransform = this.finalTransform.mat.toCSS();\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.style.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 = HybridRenderer.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 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([HybridRenderer, 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 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 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 len = shape._length,\n vPoint,\n oPoint,\n nextIPoint,\n nextVPoint,\n bounds;\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 = bm_min(bounds.left, boundingBox.x);\n boundingBox.xMax = bm_max(bounds.right, boundingBox.xMax);\n boundingBox.y = bm_min(bounds.top, boundingBox.y);\n boundingBox.yMax = bm_max(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 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 = b | 0;\n a = a | 0;\n c = c | 0;\n\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n\n t = -c / b;\n\n if (0 < t && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n\n continue;\n }\n\n b2ac = b * b - 4 * c * a;\n\n if (b2ac < 0) {\n continue;\n }\n\n t1 = (-b + bm_sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bm_sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n\n this.shapeBoundingBox.left = bm_min.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bm_min.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bm_max.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bm_max.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bm_pow(1 - t, 3) * p0[i] + 3 * bm_pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bm_pow(t, 2) * p2[i] + bm_pow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i,\n len = itemsData.length,\n path;\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 this.shapeCont.style.transform = this.shapeCont.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\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 innerElemStyle.color = innerElemStyle.fill = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\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 fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i, len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan, tParent, tCont;\n var matrixHelper = this.mHelper;\n var shapes,\n 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', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\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 {\n 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 }\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) {\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 tCont.style.transform = tCont.style.webkitTransform = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\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 tSpan.style.transform = tSpan.style.webkitTransform = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\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 if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n } else {\n // Todo Benchmark if using this is better than getBBox\n if (this.isMasked && this.finalTransform._matMdf) {\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n }\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 len,\n count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter, textSpan, textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n continue;\n }\n\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.transform = textSpan.style.webkitTransform = 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 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 this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n }\n }\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.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\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 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 len = this.comp.threeDElements.length,\n comp;\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 comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v + 'px';\n comp.container.style.transformOrigin = comp.container.style.mozTransformOrigin = comp.container.style.webkitTransformOrigin = \"0px 0px 0px\";\n comp.perspectiveElem.style.transform = comp.perspectiveElem.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\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, 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 var mat;\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 m_rotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var m_rotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(m_rotationY).rotateX(-m_rotationX);\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\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n comp.container.style.transform = comp.container.style.webkitTransform = this.mat.toCSS();\n }\n\n if (this.pe._mdf) {\n comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.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 HEffects() {}\n\n HEffects.prototype.renderFrame = function () {};\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 len = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < len; 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 len = animElements.length;\n\n for (i = 0; i < len; 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 && len === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerHTML = '';\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 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.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\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.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.subframeEnabled = subframeEnabled;\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.context) {\n this.context = params.context;\n }\n\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = params.animType ? params.animType : params.renderer ? params.renderer : 'svg';\n\n switch (animType) {\n case 'canvas':\n this.renderer = new CanvasRenderer(this, params.rendererSettings);\n break;\n\n case 'svg':\n this.renderer = new SVGRenderer(this, params.rendererSettings);\n break;\n\n default:\n this.renderer = new HybridRenderer(this, params.rendererSettings);\n break;\n }\n\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null) {} else if (params.loop === false) {\n this.loop = false;\n } else if (params.loop === true) {\n this.loop = true;\n } else {\n this.loop = parseInt(params.loop);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = params.hasOwnProperty('autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n\n if (params.animationData) {\n this.configAnimation(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 assetLoader.load(params.path, this.configAnimation.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n }\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n var params = {\n wrapper: wrapper,\n animationData: animationData ? typeof animationData === \"object\" ? animationData : JSON.parse(animationData) : null\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === '') {} else if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else {\n params.loop = parseInt(loop);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') ? 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') ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') ? 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 len = layers.length;\n var newLayers = data.layers;\n var j,\n 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.completeData(this.animationData, this.renderer.globalData.fontManager);\n this.renderer.includeLayers(data.layers);\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 assetLoader.load(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 this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\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.firstFrame = Math.round(this.animationData.ip);\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\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.loaded()) {\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.loaded() && (this.imagePreloader.loaded() || this.renderer.rendererType !== 'canvas')) {\n this.isLoaded = true;\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\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.subframeEnabled = flag ? true : false;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.subframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame;\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 };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false) {\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\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._idle = true;\n this.trigger('_idle');\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.goToAndStop = function (value, isFrame, name) {\n if (name && this.name != name) {\n return;\n }\n\n 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 this.goToAndStop(value, isFrame, name);\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 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.timeCompleted = this.totalFrames = arr[0] - arr[1];\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.timeCompleted = this.totalFrames = arr[1] - arr[0];\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.timeCompleted = this.totalFrames = end - init;\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 arr[0] === 'object') {\n var i,\n 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]); //this.segments.push([this.animationData.ip*this.frameRate,Math.floor(this.animationData.op - this.animationData.ip+this.animationData.ip*this.frameRate)]);\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 = this.onLoopComplete = this.onComplete = this.onSegmentStart = this.onDestroy = null;\n this.renderer = 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.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * 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 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\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.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 '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 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 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 expressionsPlugin = Expressions;\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\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 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\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, .833, .833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, .667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(.33, 0, .667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = typeof a;\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] = 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 lenA = a.length,\n 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 var tOfB = typeof b;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] = 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 lenA = a.length,\n 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 var tOfB = typeof b;\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i, 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 var tOfB = typeof b;\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i, 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);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b);\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 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 min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = 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\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, g, b;\n\n if (s === 0) {\n r = g = b = 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 } else 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 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 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 len = points.length;\n var path = shape_pool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0],\n inVertexPoint,\n 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, $bm_transform, content, 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, loop_in, loopOut, loop_out, smooth;\n var toWorld, fromWorld, fromComp, toComp, fromCompToSurface, position, rotation, anchorPoint, scale, thisLayer, thisComp, mask, valueAtTime, velocityAtTime;\n var __expression_functions = [];\n\n if (data.xf) {\n var i,\n len = data.xf.length;\n\n for (i = 0; i < len; i += 1) {\n __expression_functions[i] = eval('(function(){ return ' + data.xf[i] + '}())');\n }\n }\n\n var scoped_bm_rt;\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}' + ']')[0];\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 i,\n j,\n len = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', len);\n freq = 5;\n var iterations = Math.floor(time * freq);\n i = 0;\n j = 0;\n\n while (i < iterations) {\n //var rnd = BMMath.random();\n for (j = 0; j < len; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); //addedAmps[j] += -amp + amp*2*rnd;\n }\n\n i += 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', len);\n\n if (len > 1) {\n for (j = 0; j < len; 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 } else {\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }\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 t = t > 1 ? 1 : t < 0 ? 0 : t;\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var i,\n len = val1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = (val2[i] - val1[i]) * mult + val1[i];\n }\n\n return arr;\n } else {\n return (val2 - val1) * mult + val1;\n }\n }\n\n function nearestKey(time) {\n var i,\n len = data.k.length,\n index,\n 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 (i = 0; i < len - 1; i += 1) {\n if (time === data.k[i].t) {\n index = i + 1;\n keyTime = data.k[i].t;\n break;\n } else if (time > data.k[i].t && time < data.k[i + 1].t) {\n if (time - data.k[i].t > data.k[i + 1].t - time) {\n index = i + 2;\n keyTime = data.k[i + 1].t;\n } else {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n }\n }\n\n var ob = {};\n ob.index = index;\n ob.time = keyTime / elem.comp.globalData.frameRate;\n return ob;\n }\n\n function key(ind) {\n var ob, i, len;\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 ob = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = data.k[ind].hasOwnProperty('s') ? data.k[ind].s : data.k[ind - 1].e;\n len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n ob[i] = arr[i];\n ob.value[i] = arr[i];\n }\n\n return ob;\n }\n\n function framesToTime(frames, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return frames / 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, velocity, value, text, textIndex, textTotal, 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 (_needsRandom) {\n seedRandom(randSeed);\n }\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 (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\n if (scoped_bm_rt.propType === \"shape\") {\n scoped_bm_rt = scoped_bm_rt.v;\n } // globalData.popExpression();\n\n\n return scoped_bm_rt;\n }\n\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\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 } else {\n var cycleDuration, 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 - elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i, len, 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);\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);\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;\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);\n }\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 } else {\n var cycleDuration, 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(elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i, len, 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);\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);\n }\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 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 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 getTransformValueAtTime(time) {\n console.warn('Transform at time not supported');\n }\n\n function getTransformStaticValueAtTime(time) {}\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: shape_pool.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 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 len = lengths.length;\n var j = 0,\n jLen;\n var accumulatedLength = 0,\n 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 perc = perc == 1 ? this.v.c ? 0 : 0.999 : perc;\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 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\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 var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i,\n 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(pathInterfaceFactory(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 }\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 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\n interfaceFunction.propertyGroup = function (val) {\n if (val === 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(val - 1);\n }\n };\n\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\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 = function (val) {\n if (val === 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(val - 1);\n }\n };\n\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 } else if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\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(propertyGroup);\n view.o.setGroupProperty(propertyGroup);\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val === 1) {\n return ob;\n } else {\n return propertyGroup(val - 1);\n }\n }\n\n function _dashPropertyGroup(val) {\n if (val === 1) {\n return dashOb;\n } else {\n return _propertyGroup(val - 1);\n }\n }\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 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 } else if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n } else if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\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(_propertyGroup);\n view.o.setGroupProperty(_propertyGroup);\n view.w.setGroupProperty(_propertyGroup);\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(_propertyGroup);\n view.e.setGroupProperty(_propertyGroup);\n view.o.setGroupProperty(_propertyGroup);\n\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\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 _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n view.transform.mProps.o.setGroupProperty(_propertyGroup);\n view.transform.mProps.p.setGroupProperty(_propertyGroup);\n view.transform.mProps.a.setGroupProperty(_propertyGroup);\n view.transform.mProps.s.setGroupProperty(_propertyGroup);\n view.transform.mProps.r.setGroupProperty(_propertyGroup);\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(_propertyGroup);\n view.transform.mProps.sa.setGroupProperty(_propertyGroup);\n }\n\n view.transform.op.setGroupProperty(_propertyGroup);\n\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\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 _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(_propertyGroup);\n prop.p.setGroupProperty(_propertyGroup);\n\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\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 _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(_propertyGroup);\n prop.os.setGroupProperty(_propertyGroup);\n prop.pt.setGroupProperty(_propertyGroup);\n prop.p.setGroupProperty(_propertyGroup);\n prop.r.setGroupProperty(_propertyGroup);\n\n if (shape.ir) {\n prop.ir.setGroupProperty(_propertyGroup);\n prop.is.setGroupProperty(_propertyGroup);\n }\n\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 || 'ADBE Vector Star Outer Radius' === value) {\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 || 'ADBE Vector Star Inner Radius' === value)) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\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 _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(_propertyGroup);\n prop.s.setGroupProperty(_propertyGroup);\n prop.r.setGroupProperty(_propertyGroup);\n\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\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 _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(value) {\n if (shape.r.ix === value || 'Round Corners 1' === value) {\n return interfaceFunction.radius;\n }\n }\n\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 _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(_propertyGroup);\n prop.o.setGroupProperty(_propertyGroup);\n\n function interfaceFunction(value) {\n if (shape.c.ix === value || 'Copies' === value) {\n return interfaceFunction.copies;\n } else if (shape.o.ix === value || 'Offset' === value) {\n return interfaceFunction.offset;\n }\n }\n\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 function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function _propertyGroup(val) {\n if (val == 1) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n prop.setGroupProperty(_propertyGroup);\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\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 });\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 return interfaces[value - 1];\n } else {\n var i = 0,\n 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 }\n\n _interfaceFunction.propertyGroup = propertyGroup;\n interfaces = iterateElements(shapes, view, _interfaceFunction);\n _interfaceFunction.numProperties = interfaces.length;\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _prevValue, _sourceText;\n\n function _thisLayerFunction() {}\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); //If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue ? stringValue : new String(stringValue);\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function toWorld(arr, time) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n var transformMat;\n\n if (time) {\n //Todo implement value at time on transform properties\n //transformMat = this._elem.finalTransform.mProp.getValueAtTime(time);\n transformMat = this._elem.finalTransform.mProp;\n } else {\n transformMat = this._elem.finalTransform.mProp;\n }\n\n transformMat.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n 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.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n return toWorldMat.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n var transformMat;\n\n if (time) {\n //Todo implement value at time on transform properties\n //transformMat = this._elem.finalTransform.mProp.getValueAtTime(time);\n transformMat = this._elem.finalTransform.mProp;\n } else {\n transformMat = this._elem.finalTransform.mProp;\n }\n\n transformMat.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n 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 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 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 }\n\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.fromWorld = fromWorld;\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 CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0,\n 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 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 }\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 if (transform.p) {\n var _transformFactory = ExpressionPropertyInterface(transform.p);\n }\n\n Object.defineProperty(_thisFunction, \"position\", {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n } else {\n return [transform.px.v, transform.py.v, transform.pz ? transform.pz.v : 0];\n }\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 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 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\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\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 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 return function (name) {\n var effects = elem.data.ef || [],\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 }\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n var effectElements = [];\n var i,\n 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 function _propertyGroup(val) {\n if (val === 1) {\n return groupInterface;\n } else {\n return propertyGroup(val - 1);\n }\n }\n\n var groupInterface = function groupInterface(name) {\n var effects = data.ef,\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 if (effects[i].ty === 5) {\n return effectElements[i];\n } else {\n return effectElements[i]();\n }\n }\n\n i += 1;\n }\n\n return effectElements[0]();\n };\n\n groupInterface.propertyGroup = _propertyGroup;\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.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return data.np;\n }\n });\n groupInterface.active = groupInterface.enabled = data.en !== 0;\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(propertyGroup);\n }\n\n return interfaceFunction;\n }\n\n return ob;\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, elem) {\n var _maskManager = maskManager;\n var _elem = elem;\n\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i,\n 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\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 } else {\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);\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n return valueProp;\n }\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);\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);\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.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 expressionValue[i] = arrValue[i] = property.v[i] * mult;\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 } else if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n } else {\n return MultidimensionalPropertyInterface(property);\n }\n };\n }();\n\n (function () {\n var TextExpressionSelectorProp = function () {\n function getValueProxy(index, total) {\n this.textIndex = index + 1;\n this.textTotal = total;\n this.v = this.getValue() * this.mult;\n return this.v;\n }\n\n return function TextExpressionSelectorProp(elem, data) {\n this.pv = 1;\n this.comp = elem.comp;\n this.elem = elem;\n this.mult = 0.01;\n this.propType = 'textSelector';\n this.textTotal = data.totalChars;\n this.selectorValue = 100;\n this.lastValue = [1, 1, 1];\n this.k = true;\n this.x = true;\n this.getValue = ExpressionManager.initiateExpression.bind(this)(elem, data, this);\n this.getMult = getValueProxy;\n this.getVelocityAtTime = expressionHelpers.getVelocityAtTime;\n\n if (this.kf) {\n this.getValueAtTime = expressionHelpers.getValueAtTime.bind(this);\n } else {\n this.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(this);\n }\n\n this.setGroupProperty = expressionHelpers.setGroupProperty;\n };\n }();\n\n var propertyGetTextProp = TextSelectorProp.getTextSelectorProp;\n\n TextSelectorProp.getTextSelectorProp = function (elem, data, arr) {\n if (data.t === 1) {\n return new TextExpressionSelectorProp(elem, data, arr);\n } else {\n return propertyGetTextProp(elem, data, arr);\n }\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() {}\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i,\n len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i++) {\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 len = this.data.ef.length;\n var eff,\n 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 var lottie = {};\n var _isFrozen = false;\n\n function setLocationHref(href) {\n locationHref = 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 subframeEnabled = flag;\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 defaultCurveSegments = 200;\n break;\n\n case 'medium':\n defaultCurveSegments = 50;\n break;\n\n case 'low':\n defaultCurveSegments = 10;\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n defaultCurveSegments = value;\n }\n\n if (defaultCurveSegments >= 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 expressionsPlugin = 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 }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocationHref;\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.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.__getFactory = getFactory;\n lottie.version = '5.6.0';\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++) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n return decodeURIComponent(pair[1]);\n }\n }\n }\n\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\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 var queryString = myScript.src.replace(/^[^\\?]+\\??/, '');\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100);\n return lottie;\n});"],"sourceRoot":""}