0xV3NOMx
Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64



Your IP : 18.217.237.68


Current Path : /proc/thread-self/root/var/www/college/static/js/
Upload File :
Current File : //proc/thread-self/root/var/www/college/static/js/560.a0d318b2.chunk.js.map

{"version":3,"file":"static/js/560.a0d318b2.chunk.js","mappings":"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","sources":["../node_modules/lottie-react/compiled/hooks/useLottie.js","../node_modules/lottie-react/compiled/hooks/useLottieInteractivity.js","../node_modules/lottie-react/compiled/components/Lottie.js","../node_modules/lottie-web/build/player/lottie.js"],"sourcesContent":["import lottie from \"lottie-web\";\nimport React, { useEffect, useRef, useState, } from \"react\";\nconst useLottie = (props, style) => {\n    const { animationData, loop, autoplay, initialSegment, onComplete, onLoopComplete, onEnterFrame, onSegmentStart, onConfigReady, onDataReady, onDataFailed, onLoadedImages, onDOMLoaded, onDestroy, \n    // Specified here to take them out from the 'rest'\n    lottieRef, renderer, name, assetsPath, rendererSettings, \n    // TODO: find a better way to extract the html props to avoid specifying\n    //  all the props that we want to exclude (as you can see above)\n    ...rest } = props;\n    const [animationLoaded, setAnimationLoaded] = useState(false);\n    const animationInstanceRef = useRef();\n    const animationContainer = useRef(null);\n    /*\n          ======================================\n              INTERACTION METHODS\n          ======================================\n       */\n    /**\n     * Play\n     */\n    const play = () => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.play();\n    };\n    /**\n     * Stop\n     */\n    const stop = () => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.stop();\n    };\n    /**\n     * Pause\n     */\n    const pause = () => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.pause();\n    };\n    /**\n     * Set animation speed\n     * @param speed\n     */\n    const setSpeed = (speed) => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSpeed(speed);\n    };\n    /**\n     * Got to frame and play\n     * @param value\n     * @param isFrame\n     */\n    const goToAndPlay = (value, isFrame) => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndPlay(value, isFrame);\n    };\n    /**\n     * Got to frame and stop\n     * @param value\n     * @param isFrame\n     */\n    const goToAndStop = (value, isFrame) => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndStop(value, isFrame);\n    };\n    /**\n     * Set animation direction\n     * @param direction\n     */\n    const setDirection = (direction) => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setDirection(direction);\n    };\n    /**\n     * Play animation segments\n     * @param segments\n     * @param forceFlag\n     */\n    const playSegments = (segments, forceFlag) => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.playSegments(segments, forceFlag);\n    };\n    /**\n     * Set sub frames\n     * @param useSubFrames\n     */\n    const setSubframe = (useSubFrames) => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSubframe(useSubFrames);\n    };\n    /**\n     * Get animation duration\n     * @param inFrames\n     */\n    const getDuration = (inFrames) => { var _a; return (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.getDuration(inFrames); };\n    /**\n     * Destroy animation\n     */\n    const destroy = () => {\n        var _a;\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();\n        // Removing the reference to the animation so separate cleanups are skipped.\n        // Without it the internal `lottie-react` instance throws exceptions as it already cleared itself on destroy.\n        animationInstanceRef.current = undefined;\n    };\n    /*\n          ======================================\n              LOTTIE\n          ======================================\n       */\n    /**\n     * Load a new animation, and if it's the case, destroy the previous one\n     * @param {Object} forcedConfigs\n     */\n    const loadAnimation = (forcedConfigs = {}) => {\n        var _a;\n        // Return if the container ref is null\n        if (!animationContainer.current) {\n            return;\n        }\n        // Destroy any previous instance\n        (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();\n        // Build the animation configuration\n        const config = {\n            ...props,\n            ...forcedConfigs,\n            container: animationContainer.current,\n        };\n        // Save the animation instance\n        animationInstanceRef.current = lottie.loadAnimation(config);\n        setAnimationLoaded(!!animationInstanceRef.current);\n        // Return a function that will clean up\n        return () => {\n            var _a;\n            (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy();\n            animationInstanceRef.current = undefined;\n        };\n    };\n    /**\n     * (Re)Initialize when animation data changed\n     */\n    useEffect(() => {\n        const onUnmount = loadAnimation();\n        // Clean up on unmount\n        return () => onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount();\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [animationData, loop]);\n    // Update the autoplay state\n    useEffect(() => {\n        if (!animationInstanceRef.current) {\n            return;\n        }\n        animationInstanceRef.current.autoplay = !!autoplay;\n    }, [autoplay]);\n    // Update the initial segment state\n    useEffect(() => {\n        if (!animationInstanceRef.current) {\n            return;\n        }\n        // When null should reset to default animation length\n        if (!initialSegment) {\n            animationInstanceRef.current.resetSegments(true);\n            return;\n        }\n        // If it's not a valid segment, do nothing\n        if (!Array.isArray(initialSegment) || !initialSegment.length) {\n            return;\n        }\n        // If the current position it's not in the new segment\n        // set the current position to start\n        if (animationInstanceRef.current.currentRawFrame < initialSegment[0] ||\n            animationInstanceRef.current.currentRawFrame > initialSegment[1]) {\n            animationInstanceRef.current.currentRawFrame = initialSegment[0];\n        }\n        // Update the segment\n        animationInstanceRef.current.setSegment(initialSegment[0], initialSegment[1]);\n    }, [initialSegment]);\n    /*\n          ======================================\n              EVENTS\n          ======================================\n       */\n    /**\n     * Reinitialize listener on change\n     */\n    useEffect(() => {\n        const partialListeners = [\n            { name: \"complete\", handler: onComplete },\n            { name: \"loopComplete\", handler: onLoopComplete },\n            { name: \"enterFrame\", handler: onEnterFrame },\n            { name: \"segmentStart\", handler: onSegmentStart },\n            { name: \"config_ready\", handler: onConfigReady },\n            { name: \"data_ready\", handler: onDataReady },\n            { name: \"data_failed\", handler: onDataFailed },\n            { name: \"loaded_images\", handler: onLoadedImages },\n            { name: \"DOMLoaded\", handler: onDOMLoaded },\n            { name: \"destroy\", handler: onDestroy },\n        ];\n        const listeners = partialListeners.filter((listener) => listener.handler != null);\n        if (!listeners.length) {\n            return;\n        }\n        const deregisterList = listeners.map(\n        /**\n         * Handle the process of adding an event listener\n         * @param {Listener} listener\n         * @return {Function} Function that deregister the listener\n         */\n        (listener) => {\n            var _a;\n            (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener(listener.name, listener.handler);\n            // Return a function to deregister this listener\n            return () => {\n                var _a;\n                (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(listener.name, listener.handler);\n            };\n        });\n        // Deregister listeners on unmount\n        return () => {\n            deregisterList.forEach((deregister) => deregister());\n        };\n    }, [\n        onComplete,\n        onLoopComplete,\n        onEnterFrame,\n        onSegmentStart,\n        onConfigReady,\n        onDataReady,\n        onDataFailed,\n        onLoadedImages,\n        onDOMLoaded,\n        onDestroy,\n    ]);\n    /**\n     * Build the animation view\n     */\n    const View = React.createElement(\"div\", { style: style, ref: animationContainer, ...rest });\n    return {\n        View,\n        play,\n        stop,\n        pause,\n        setSpeed,\n        goToAndStop,\n        goToAndPlay,\n        setDirection,\n        playSegments,\n        setSubframe,\n        getDuration,\n        destroy,\n        animationContainerRef: animationContainer,\n        animationLoaded,\n        animationItem: animationInstanceRef.current,\n    };\n};\nexport default useLottie;\n","import { useEffect } from \"react\";\n// helpers\nexport function getContainerVisibility(container) {\n    const { top, height } = container.getBoundingClientRect();\n    const current = window.innerHeight - top;\n    const max = window.innerHeight + height;\n    return current / max;\n}\nexport function getContainerCursorPosition(container, cursorX, cursorY) {\n    const { top, left, width, height } = container.getBoundingClientRect();\n    const x = (cursorX - left) / width;\n    const y = (cursorY - top) / height;\n    return { x, y };\n}\nexport const useInitInteractivity = ({ wrapperRef, animationItem, mode, actions, }) => {\n    useEffect(() => {\n        const wrapper = wrapperRef.current;\n        if (!wrapper || !animationItem || !actions.length) {\n            return;\n        }\n        animationItem.stop();\n        const scrollModeHandler = () => {\n            let assignedSegment = null;\n            const scrollHandler = () => {\n                const currentPercent = getContainerVisibility(wrapper);\n                // Find the first action that satisfies the current position conditions\n                const action = actions.find(({ visibility }) => visibility &&\n                    currentPercent >= visibility[0] &&\n                    currentPercent <= visibility[1]);\n                // Skip if no matching action was found!\n                if (!action) {\n                    return;\n                }\n                if (action.type === \"seek\" &&\n                    action.visibility &&\n                    action.frames.length === 2) {\n                    // Seek: Go to a frame based on player scroll position action\n                    const frameToGo = action.frames[0] +\n                        Math.ceil(((currentPercent - action.visibility[0]) /\n                            (action.visibility[1] - action.visibility[0])) *\n                            action.frames[1]);\n                    //! goToAndStop must be relative to the start of the current segment\n                    animationItem.goToAndStop(frameToGo - animationItem.firstFrame - 1, true);\n                }\n                if (action.type === \"loop\") {\n                    // Loop: Loop a given frames\n                    if (assignedSegment === null) {\n                        // if not playing any segments currently. play those segments and save to state\n                        animationItem.playSegments(action.frames, true);\n                        assignedSegment = action.frames;\n                    }\n                    else {\n                        // if playing any segments currently.\n                        //check if segments in state are equal to the frames selected by action\n                        if (assignedSegment !== action.frames) {\n                            // if they are not equal. new segments are to be loaded\n                            animationItem.playSegments(action.frames, true);\n                            assignedSegment = action.frames;\n                        }\n                        else if (animationItem.isPaused) {\n                            // if they are equal the play method must be called only if lottie is paused\n                            animationItem.playSegments(action.frames, true);\n                            assignedSegment = action.frames;\n                        }\n                    }\n                }\n                if (action.type === \"play\" && animationItem.isPaused) {\n                    // Play: Reset segments and continue playing full animation from current position\n                    animationItem.resetSegments(true);\n                    animationItem.play();\n                }\n                if (action.type === \"stop\") {\n                    // Stop: Stop playback\n                    animationItem.goToAndStop(action.frames[0] - animationItem.firstFrame - 1, true);\n                }\n            };\n            document.addEventListener(\"scroll\", scrollHandler);\n            return () => {\n                document.removeEventListener(\"scroll\", scrollHandler);\n            };\n        };\n        const cursorModeHandler = () => {\n            const handleCursor = (_x, _y) => {\n                let x = _x;\n                let y = _y;\n                // Resolve cursor position if cursor is inside container\n                if (x !== -1 && y !== -1) {\n                    // Get container cursor position\n                    const pos = getContainerCursorPosition(wrapper, x, y);\n                    // Use the resolved position\n                    x = pos.x;\n                    y = pos.y;\n                }\n                // Find the first action that satisfies the current position conditions\n                const action = actions.find(({ position }) => {\n                    if (position &&\n                        Array.isArray(position.x) &&\n                        Array.isArray(position.y)) {\n                        return (x >= position.x[0] &&\n                            x <= position.x[1] &&\n                            y >= position.y[0] &&\n                            y <= position.y[1]);\n                    }\n                    if (position &&\n                        !Number.isNaN(position.x) &&\n                        !Number.isNaN(position.y)) {\n                        return x === position.x && y === position.y;\n                    }\n                    return false;\n                });\n                // Skip if no matching action was found!\n                if (!action) {\n                    return;\n                }\n                // Process action types:\n                if (action.type === \"seek\" &&\n                    action.position &&\n                    Array.isArray(action.position.x) &&\n                    Array.isArray(action.position.y) &&\n                    action.frames.length === 2) {\n                    // Seek: Go to a frame based on player scroll position action\n                    const xPercent = (x - action.position.x[0]) /\n                        (action.position.x[1] - action.position.x[0]);\n                    const yPercent = (y - action.position.y[0]) /\n                        (action.position.y[1] - action.position.y[0]);\n                    animationItem.playSegments(action.frames, true);\n                    animationItem.goToAndStop(Math.ceil(((xPercent + yPercent) / 2) *\n                        (action.frames[1] - action.frames[0])), true);\n                }\n                if (action.type === \"loop\") {\n                    animationItem.playSegments(action.frames, true);\n                }\n                if (action.type === \"play\") {\n                    // Play: Reset segments and continue playing full animation from current position\n                    if (animationItem.isPaused) {\n                        animationItem.resetSegments(false);\n                    }\n                    animationItem.playSegments(action.frames);\n                }\n                if (action.type === \"stop\") {\n                    animationItem.goToAndStop(action.frames[0], true);\n                }\n            };\n            const mouseMoveHandler = (ev) => {\n                handleCursor(ev.clientX, ev.clientY);\n            };\n            const mouseOutHandler = () => {\n                handleCursor(-1, -1);\n            };\n            wrapper.addEventListener(\"mousemove\", mouseMoveHandler);\n            wrapper.addEventListener(\"mouseout\", mouseOutHandler);\n            return () => {\n                wrapper.removeEventListener(\"mousemove\", mouseMoveHandler);\n                wrapper.removeEventListener(\"mouseout\", mouseOutHandler);\n            };\n        };\n        switch (mode) {\n            case \"scroll\":\n                return scrollModeHandler();\n            case \"cursor\":\n                return cursorModeHandler();\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [mode, animationItem]);\n};\nconst useLottieInteractivity = ({ actions, mode, lottieObj, }) => {\n    const { animationItem, View, animationContainerRef } = lottieObj;\n    useInitInteractivity({\n        actions,\n        animationItem,\n        mode,\n        wrapperRef: animationContainerRef,\n    });\n    return View;\n};\nexport default useLottieInteractivity;\n","import { useEffect } from \"react\";\nimport useLottie from \"../hooks/useLottie\";\nimport useLottieInteractivity from \"../hooks/useLottieInteractivity\";\nconst Lottie = (props) => {\n    var _a, _b, _c;\n    const { style, interactivity, ...lottieProps } = props;\n    /**\n     * Initialize the 'useLottie' hook\n     */\n    const { View, play, stop, pause, setSpeed, goToAndStop, goToAndPlay, setDirection, playSegments, setSubframe, getDuration, destroy, animationContainerRef, animationLoaded, animationItem, } = useLottie(lottieProps, style);\n    /**\n     * Make the hook variables/methods available through the provided 'lottieRef'\n     */\n    useEffect(() => {\n        if (props.lottieRef) {\n            props.lottieRef.current = {\n                play,\n                stop,\n                pause,\n                setSpeed,\n                goToAndPlay,\n                goToAndStop,\n                setDirection,\n                playSegments,\n                setSubframe,\n                getDuration,\n                destroy,\n                animationContainerRef,\n                animationLoaded,\n                animationItem,\n            };\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [(_a = props.lottieRef) === null || _a === void 0 ? void 0 : _a.current]);\n    return useLottieInteractivity({\n        lottieObj: {\n            View,\n            play,\n            stop,\n            pause,\n            setSpeed,\n            goToAndStop,\n            goToAndPlay,\n            setDirection,\n            playSegments,\n            setSubframe,\n            getDuration,\n            destroy,\n            animationContainerRef,\n            animationLoaded,\n            animationItem,\n        },\n        actions: (_b = interactivity === null || interactivity === void 0 ? void 0 : interactivity.actions) !== null && _b !== void 0 ? _b : [],\n        mode: (_c = interactivity === null || interactivity === void 0 ? void 0 : interactivity.mode) !== null && _c !== void 0 ? _c : \"scroll\",\n    });\n};\nexport default Lottie;\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\n  };\n\n  var getLocationHref = function getLocationHref() {\n    return locationHref;\n  };\n\n  function createTag(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElement(type);\n  }\n\n  function extendPrototype(sources, destination) {\n    var i;\n    var len = sources.length;\n    var sourcePrototype;\n\n    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n  var audioControllerFactory = function () {\n    function AudioController(audioFactory) {\n      this.audios = [];\n      this.audioFactory = audioFactory;\n      this._volume = 1;\n      this._isMuted = false;\n    }\n\n    AudioController.prototype = {\n      addAudio: function addAudio(audio) {\n        this.audios.push(audio);\n      },\n      pause: function pause() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause();\n        }\n      },\n      resume: function resume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume();\n        }\n      },\n      setRate: function setRate(rateValue) {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue);\n        }\n      },\n      createAudio: function createAudio(assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath);\n        }\n\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\n          });\n        }\n\n        return {\n          isPlaying: false,\n          play: function play() {\n            this.isPlaying = true;\n          },\n          seek: function seek() {\n            this.isPlaying = false;\n          },\n          playing: function playing() {},\n          rate: function rate() {},\n          setVolume: function setVolume() {}\n        };\n      },\n      setAudioFactory: function setAudioFactory(audioFactory) {\n        this.audioFactory = audioFactory;\n      },\n      setVolume: function setVolume(value) {\n        this._volume = value;\n\n        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\n\n        this._updateVolume();\n      },\n      getVolume: function getVolume() {\n        return this._volume;\n      },\n      _updateVolume: function _updateVolume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n        }\n      }\n    };\n    return function () {\n      return new AudioController();\n    };\n  }();\n\n  var createTypedArray = function () {\n    function createRegularArray(type, len) {\n      var i = 0;\n      var arr = [];\n      var value;\n\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n\n        default:\n          value = 1.1;\n          break;\n      }\n\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n\n      return arr;\n    }\n\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n\n      return createRegularArray(type, len);\n    }\n\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n\n    return createRegularArray;\n  }();\n\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n  var subframeEnabled = true;\n  var expressionsPlugin = null;\n  var expressionsInterfaces = null;\n  var idPrefix$1 = '';\n  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  var _shouldRoundValues = false;\n  var bmPow = Math.pow;\n  var bmSqrt = Math.sqrt;\n  var bmFloor = Math.floor;\n  var bmMax = Math.max;\n  var bmMin = Math.min;\n  var BMMath = {};\n\n  (function () {\n    var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n    var i;\n    var len = propertyNames.length;\n\n    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n\n  function ProjectInterface$1() {\n    return {};\n  }\n\n  BMMath.random = Math.random;\n\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$6(val);\n\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n\n      return absArr;\n    }\n\n    return Math.abs(val);\n  };\n\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n\n    return value;\n  }\n\n  function styleDiv(element) {\n    element.style.position = 'absolute';\n    element.style.top = 0;\n    element.style.left = 0;\n    element.style.display = 'block';\n    element.style.transformOrigin = '0 0';\n    element.style.webkitTransformOrigin = '0 0';\n    element.style.backfaceVisibility = 'visible';\n    element.style.webkitBackfaceVisibility = 'visible';\n    element.style.transformStyle = 'preserve-3d';\n    element.style.webkitTransformStyle = 'preserve-3d';\n    element.style.mozTransformStyle = 'preserve-3d';\n  }\n\n  function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n    this.type = type;\n    this.currentTime = currentTime;\n    this.totalTime = totalTime;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n    this.type = type;\n    this.currentLoop = currentLoop;\n    this.totalLoops = totalLoops;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\n  }\n\n  var createElementID = function () {\n    var _count = 0;\n    return function createID() {\n      _count += 1;\n      return idPrefix$1 + '__lottie_element_' + _count;\n    };\n  }();\n\n  function HSVtoRGB(h, s, v) {\n    var r;\n    var g;\n    var b;\n    var i;\n    var f;\n    var p;\n    var q;\n    var t;\n    i = Math.floor(h * 6);\n    f = h * 6 - i;\n    p = v * (1 - s);\n    q = v * (1 - f * s);\n    t = v * (1 - (1 - f) * s);\n\n    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n\n      default:\n        break;\n    }\n\n    return [r, g, b];\n  }\n\n  function RGBtoHSV(r, g, b) {\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var d = max - min;\n    var h;\n    var s = max === 0 ? 0 : d / max;\n    var v = max / 255;\n\n    switch (max) {\n      case min:\n        h = 0;\n        break;\n\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n\n      default:\n        break;\n    }\n\n    return [h, s, v];\n  }\n\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addHueToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[0] += offset / 360;\n\n    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n\n      if (g < 0) {\n        g = 0;\n      }\n\n      if (b < 0) {\n        b = 0;\n      }\n\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n\n  var setExpressionInterfaces = function setExpressionInterfaces(value) {\n    expressionsInterfaces = value;\n  };\n\n  var getExpressionInterfaces = function getExpressionInterfaces() {\n    return expressionsInterfaces;\n  };\n\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\n  };\n\n  var getIdPrefix = function getIdPrefix() {\n    return idPrefix$1;\n  };\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type);\n  }\n\n  function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n  var dataManager = function () {\n    var _counterId = 1;\n    var processes = [];\n    var workerFn;\n    var workerInstance;\n    var workerProxy = {\n      onmessage: function onmessage() {},\n      postMessage: function postMessage(path) {\n        workerFn({\n          data: path\n        });\n      }\n    };\n    var _workerSelf = {\n      postMessage: function postMessage(data) {\n        workerProxy.onmessage({\n          data: data\n        });\n      }\n    };\n\n    function createWorker(fn) {\n      if (window.Worker && window.Blob && getWebWorker()) {\n        var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n          type: 'text/javascript'\n        }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n\n      workerFn = fn;\n      return workerProxy;\n    }\n\n    function setupWorker() {\n      if (!workerInstance) {\n        workerInstance = createWorker(function workerStart(e) {\n          function dataFunctionManager() {\n            function completeLayers(layers, comps) {\n              var layerData;\n              var i;\n              var len = layers.length;\n              var j;\n              var jLen;\n              var k;\n              var kLen;\n\n              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        convertPathsToAbsoluteValues(maskProps[j].pt.k);\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 0) {\n                    layerData.layers = findCompLayers(layerData.refId, comps);\n                    completeLayers(layerData.layers, comps);\n                  } else if (layerData.ty === 4) {\n                    completeShapes(layerData.shapes);\n                  } else if (layerData.ty === 5) {\n                    completeText(layerData);\n                  }\n                }\n              }\n            }\n\n            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (chars[i].t === 1) {\n                    // var compData = findComp(chars[i].data.refId, assets);\n                    chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n                    // chars[i].data.op = 99999;\n                    // chars[i].data.st = 0;\n                    // chars[i].data.sr = 1;\n                    // chars[i].w = compData.w;\n                    // chars[i].data.ks = {\n                    //   a: { k: [0, 0, 0], a: 0 },\n                    //   p: { k: [0, -compData.h, 0], a: 0 },\n                    //   r: { k: 0, a: 0 },\n                    //   s: { k: [100, 100], a: 0 },\n                    //   o: { k: 100, a: 0 },\n                    // };\n\n                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n\n                i += 1;\n              }\n\n              return null;\n            }\n\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n\n              return null;\n            }\n\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\n\n              for (i = len - 1; i >= 0; i -= 1) {\n                if (arr[i].ty === 'sh') {\n                  if (arr[i].ks.k.i) {\n                    convertPathsToAbsoluteValues(arr[i].ks.k);\n                  } else {\n                    jLen = arr[i].ks.k.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (arr[i].ks.k[j].s) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n                      }\n\n                      if (arr[i].ks.k[j].e) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n                      }\n                    }\n                  }\n                } else if (arr[i].ty === 'gr') {\n                  completeShapes(arr[i].it);\n                }\n              }\n            }\n\n            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\n\n              for (i = 0; i < len; i += 1) {\n                path.i[i][0] += path.v[i][0];\n                path.i[i][1] += path.v[i][1];\n                path.o[i][0] += path.v[i][0];\n                path.o[i][1] += path.v[i][1];\n              }\n            }\n\n            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n\n              return null;\n            }\n\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\n\n              function updateTextLayer(textLayer) {\n                var documentData = textLayer.t.d;\n                textLayer.t.d = {\n                  k: [{\n                    s: documentData,\n                    t: 0\n                  }]\n                };\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkChars = function () {\n              var minimumVersion = [4, 7, 99];\n              return function (animationData) {\n                if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n                  var i;\n                  var len = animationData.chars.length;\n\n                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\n\n                    if (charData.data && charData.data.shapes) {\n                      completeShapes(charData.data.shapes);\n                      charData.data.ip = 0;\n                      charData.data.op = 99999;\n                      charData.data.st = 0;\n                      charData.data.sr = 1;\n                      charData.data.ks = {\n                        p: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        s: {\n                          k: [100, 100],\n                          a: 0\n                        },\n                        a: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        r: {\n                          k: 0,\n                          a: 0\n                        },\n                        o: {\n                          k: 100,\n                          a: 0\n                        }\n                      };\n\n                      if (!animationData.chars[i].t) {\n                        charData.data.shapes.push({\n                          ty: 'no'\n                        });\n                        charData.data.shapes[0].it.push({\n                          p: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          s: {\n                            k: [100, 100],\n                            a: 0\n                          },\n                          a: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          r: {\n                            k: 0,\n                            a: 0\n                          },\n                          o: {\n                            k: 100,\n                            a: 0\n                          },\n                          sk: {\n                            k: 0,\n                            a: 0\n                          },\n                          sa: {\n                            k: 0,\n                            a: 0\n                          },\n                          ty: 'tr'\n                        });\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\n\n                for (i = 0; i < len; i += 1) {\n                  if (shapes[i].ty === 'gr') {\n                    iterateShapes(shapes[i].it);\n                  } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n                    if (shapes[i].c.k && shapes[i].c.k[0].i) {\n                      jLen = shapes[i].c.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (shapes[i].c.k[j].s) {\n                          shapes[i].c.k[j].s[0] /= 255;\n                          shapes[i].c.k[j].s[1] /= 255;\n                          shapes[i].c.k[j].s[2] /= 255;\n                          shapes[i].c.k[j].s[3] /= 255;\n                        }\n\n                        if (shapes[i].c.k[j].e) {\n                          shapes[i].c.k[j].e[0] /= 255;\n                          shapes[i].c.k[j].e[1] /= 255;\n                          shapes[i].c.k[j].e[2] /= 255;\n                          shapes[i].c.k[j].e[3] /= 255;\n                        }\n                      }\n                    } else {\n                      shapes[i].c.k[0] /= 255;\n                      shapes[i].c.k[1] /= 255;\n                      shapes[i].c.k[2] /= 255;\n                      shapes[i].c.k[3] /= 255;\n                    }\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\n\n                for (i = len - 1; i >= 0; i -= 1) {\n                  if (arr[i].ty === 'sh') {\n                    if (arr[i].ks.k.i) {\n                      arr[i].ks.k.c = arr[i].closed;\n                    } else {\n                      jLen = arr[i].ks.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (arr[i].ks.k[j].s) {\n                          arr[i].ks.k[j].s[0].c = arr[i].closed;\n                        }\n\n                        if (arr[i].ks.k[j].e) {\n                          arr[i].ks.k[j].e[0].c = arr[i].closed;\n                        }\n                      }\n                    }\n                  } else if (arr[i].ty === 'gr') {\n                    completeClosingShapes(arr[i].it);\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var layerData;\n                var i;\n                var len = layers.length;\n                var j;\n                var jLen;\n                var k;\n                var kLen;\n\n                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        maskProps[j].pt.k.c = maskProps[j].cl;\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\n              }\n\n              checkColors(animationData);\n              checkText(animationData);\n              checkChars(animationData);\n              checkPathProperties(animationData);\n              checkShapes(animationData);\n              completeLayers(animationData.layers, animationData.assets);\n              completeChars(animationData.chars, animationData.assets);\n              animationData.__complete = true;\n            }\n\n            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n              }\n            }\n\n            var moduleOb = {};\n            moduleOb.completeData = completeData;\n            moduleOb.checkColors = checkColors;\n            moduleOb.checkChars = checkChars;\n            moduleOb.checkPathProperties = checkPathProperties;\n            moduleOb.checkShapes = checkShapes;\n            moduleOb.completeLayers = completeLayers;\n            return moduleOb;\n          }\n\n          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\n          }\n\n          if (!_workerSelf.assetLoader) {\n            _workerSelf.assetLoader = function () {\n              function formatResponse(xhr) {\n                // using typeof doubles the time of execution of this method,\n                // so if available, it's better to use the header to validate the type\n                var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n\n                if (xhr.response && _typeof$5(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n\n                return null;\n              }\n\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\n\n\n                xhr.onreadystatechange = function () {\n                  if (xhr.readyState === 4) {\n                    if (xhr.status === 200) {\n                      response = formatResponse(xhr);\n                      callback(response);\n                    } else {\n                      try {\n                        response = formatResponse(xhr);\n                        callback(response);\n                      } catch (err) {\n                        if (errorCallback) {\n                          errorCallback(err);\n                        }\n                      }\n                    }\n                  }\n                };\n\n                try {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), path, true);\n                } catch (error) {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n                }\n\n                xhr.send();\n              }\n\n              return {\n                load: loadAsset\n              };\n            }();\n          }\n\n          if (e.data.type === 'loadAnimation') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.dataManager.completeData(data);\n\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          } else if (e.data.type === 'complete') {\n            var animation = e.data.animation;\n\n            _workerSelf.dataManager.completeData(animation);\n\n            _workerSelf.postMessage({\n              id: e.data.id,\n              payload: animation,\n              status: 'success'\n            });\n          } else if (e.data.type === 'loadData') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          }\n        });\n\n        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\n          }\n        };\n      }\n    }\n\n    function createProcess(onComplete, onError) {\n      _counterId += 1;\n      var id = 'processId_' + _counterId;\n      processes[id] = {\n        onComplete: onComplete,\n        onError: onError\n      };\n      return id;\n    }\n\n    function loadAnimation(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadAnimation',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function loadData(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadData',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function completeAnimation(anim, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'complete',\n        animation: anim,\n        id: processId\n      });\n    }\n\n    return {\n      loadAnimation: loadAnimation,\n      loadData: loadData,\n      completeAnimation: completeAnimation\n    };\n  }();\n\n  var ImagePreloader = function () {\n    var proxyImage = function () {\n      var canvas = createTag('canvas');\n      canvas.width = 1;\n      canvas.height = 1;\n      var ctx = canvas.getContext('2d');\n      ctx.fillStyle = 'rgba(0,0,0,0)';\n      ctx.fillRect(0, 0, 1, 1);\n      return canvas;\n    }();\n\n    function imageLoaded() {\n      this.loadedAssets += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n\n      return path;\n    }\n\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n\n          clearInterval(intervalId);\n        }\n\n        _count += 1;\n      }.bind(this), 50);\n    }\n\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createImgData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createTag('img');\n      img.crossOrigin = 'anonymous';\n      img.addEventListener('load', this._imageLoaded, false);\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.src = path;\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createFootageData(data) {\n      var ob = {\n        assetData: data\n      };\n      var path = getAssetsPath(data, this.assetsPath, this.path);\n      dataManager.loadData(path, function (footageData) {\n        ob.img = footageData;\n\n        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (!assets[i].layers) {\n          if (!assets[i].t || assets[i].t === 'seq') {\n            this.totalImages += 1;\n            this.images.push(this._createImageData(assets[i]));\n          } else if (assets[i].t === 3) {\n            this.totalFootages += 1;\n            this.images.push(this.createFootageData(assets[i]));\n          }\n        }\n      }\n    }\n\n    function setPath(path) {\n      this.path = path || '';\n    }\n\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n\n        i += 1;\n      }\n\n      return null;\n    }\n\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\n    }\n\n    function setCacheType(type, elementHelper) {\n      if (type === 'svg') {\n        this._elementHelper = elementHelper;\n        this._createImageData = this.createImageData.bind(this);\n      } else {\n        this._createImageData = this.createImgData.bind(this);\n      }\n    }\n\n    function ImagePreloaderFactory() {\n      this._imageLoaded = imageLoaded.bind(this);\n      this._footageLoaded = footageLoaded.bind(this);\n      this.testImageLoaded = testImageLoaded.bind(this);\n      this.createFootageData = createFootageData.bind(this);\n      this.assetsPath = '';\n      this.path = '';\n      this.totalImages = 0;\n      this.totalFootages = 0;\n      this.loadedAssets = 0;\n      this.loadedFootagesCount = 0;\n      this.imagesLoadedCb = null;\n      this.images = [];\n    }\n\n    ImagePreloaderFactory.prototype = {\n      loadAssets: loadAssets,\n      setAssetsPath: setAssetsPath,\n      setPath: setPath,\n      loadedImages: loadedImages,\n      loadedFootages: loadedFootages,\n      destroy: destroy,\n      getAsset: getAsset,\n      createImgData: createImgData,\n      createImageData: createImageData,\n      imageLoaded: imageLoaded,\n      footageLoaded: footageLoaded,\n      setCacheType: setCacheType\n    };\n    return ImagePreloaderFactory;\n  }();\n\n  function BaseEvent() {}\n\n  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\n\n        for (var i = 0; i < callbacks.length; i += 1) {\n          callbacks[i](args);\n        }\n      }\n    },\n    addEventListener: function addEventListener(eventName, callback) {\n      if (!this._cbs[eventName]) {\n        this._cbs[eventName] = [];\n      }\n\n      this._cbs[eventName].push(callback);\n\n      return function () {\n        this.removeEventListener(eventName, callback);\n      }.bind(this);\n    },\n    removeEventListener: function removeEventListener(eventName, callback) {\n      if (!callback) {\n        this._cbs[eventName] = null;\n      } else if (this._cbs[eventName]) {\n        var i = 0;\n        var len = this._cbs[eventName].length;\n\n        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n\n            i -= 1;\n            len -= 1;\n          }\n\n          i += 1;\n        }\n\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null;\n        }\n      }\n    }\n  };\n\n  var markerParser = function () {\n    function parsePayloadLines(payload) {\n      var lines = payload.split('\\r\\n');\n      var keys = {};\n      var line;\n      var keysCount = 0;\n\n      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n\n      if (keysCount === 0) {\n        throw new Error();\n      }\n\n      return keys;\n    }\n\n    return function (_markers) {\n      var markers = [];\n\n      for (var i = 0; i < _markers.length; i += 1) {\n        var _marker = _markers[i];\n        var markerData = {\n          time: _marker.tm,\n          duration: _marker.dr\n        };\n\n        try {\n          markerData.payload = JSON.parse(_markers[i].cm);\n        } catch (_) {\n          try {\n            markerData.payload = parsePayloadLines(_markers[i].cm);\n          } catch (__) {\n            markerData.payload = {\n              name: _markers[i].cm\n            };\n          }\n        }\n\n        markers.push(markerData);\n      }\n\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\n\n        while (i < len) {\n          if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n            if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n              this.compositions[i].prepareFrame(this.currentFrame);\n            }\n\n            return this.compositions[i].compInterface;\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n\n  function getRenderer(key) {\n    return renderers[key];\n  }\n\n  function getRegisteredRenderer() {\n    // Returns canvas by default for compatibility\n    if (renderers.canvas) {\n      return 'canvas';\n    } // Returns any renderer that is registered\n\n\n    for (var key in renderers) {\n      if (renderers[key]) {\n        return key;\n      }\n    }\n\n    return '';\n  }\n\n  function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n  var AnimationItem = function AnimationItem() {\n    this._cbs = [];\n    this.name = '';\n    this.path = '';\n    this.isLoaded = false;\n    this.currentFrame = 0;\n    this.currentRawFrame = 0;\n    this.firstFrame = 0;\n    this.totalFrames = 0;\n    this.frameRate = 0;\n    this.frameMult = 0;\n    this.playSpeed = 1;\n    this.playDirection = 1;\n    this.playCount = 0;\n    this.animationData = {};\n    this.assets = [];\n    this.isPaused = true;\n    this.autoplay = false;\n    this.loop = true;\n    this.renderer = null;\n    this.animationID = createElementID();\n    this.assetsPath = '';\n    this.timeCompleted = 0;\n    this.segmentPos = 0;\n    this.isSubframeEnabled = getSubframeEnabled();\n    this.segments = [];\n    this._idle = true;\n    this._completedLoop = false;\n    this.projectInterface = ProjectInterface();\n    this.imagePreloader = new ImagePreloader();\n    this.audioController = audioControllerFactory();\n    this.markers = [];\n    this.configAnimation = this.configAnimation.bind(this);\n    this.onSetupError = this.onSetupError.bind(this);\n    this.onSegmentComplete = this.onSegmentComplete.bind(this);\n    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n    this.expressionsPlugin = getExpressionsPlugin();\n  };\n\n  extendPrototype([BaseEvent], AnimationItem);\n\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n\n    var animType = 'svg';\n\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\n    }\n\n    var RendererClass = getRenderer(animType);\n    this.renderer = new RendererClass(this, params.rendererSettings);\n    this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n    this.renderer.setProjectInterface(this.projectInterface);\n    this.animType = animType;\n\n    if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n      this.loop = true;\n    } else if (params.loop === false) {\n      this.loop = false;\n    } else {\n      this.loop = parseInt(params.loop, 10);\n    }\n\n    this.autoplay = 'autoplay' in params ? params.autoplay : true;\n    this.name = params.name ? params.name : '';\n    this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n    this.assetsPath = params.assetsPath;\n    this.initialSegment = params.initialSegment;\n\n    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\n    }\n\n    if (params.animationData) {\n      this.setupAnimation(params.animationData);\n    } else if (params.path) {\n      if (params.path.lastIndexOf('\\\\') !== -1) {\n        this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n      } else {\n        this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n      }\n\n      this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n      this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n      dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n    }\n  };\n\n  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$4(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\n      }\n    }\n\n    var params = {\n      wrapper: wrapper,\n      animationData: animationData\n    };\n    var wrapperAttributes = wrapper.attributes;\n    params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n    params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n    var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n    if (loop === 'false') {\n      params.loop = false;\n    } else if (loop === 'true') {\n      params.loop = true;\n    } else if (loop !== '') {\n      params.loop = parseInt(loop, 10);\n    }\n\n    var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n    params.autoplay = autoplay !== 'false';\n    params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n    var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n    if (prerender === 'false') {\n      params.prerender = false;\n    }\n\n    if (!params.path) {\n      this.trigger('destroy');\n    } else {\n      this.setParams(params);\n    }\n  };\n\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op;\n      this.totalFrames = Math.floor(data.op - this.animationData.ip);\n    }\n\n    var layers = this.animationData.layers;\n    var i;\n    var len = layers.length;\n    var newLayers = data.layers;\n    var j;\n    var jLen = newLayers.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n\n        i += 1;\n      }\n    }\n\n    if (data.chars || data.fonts) {\n      this.renderer.globalData.fontManager.addChars(data.chars);\n      this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n    }\n\n    if (data.assets) {\n      len = data.assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\n    }\n\n    var segment = segments.shift();\n    this.timeCompleted = segment.time * this.frameRate;\n    var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n    this.segmentPos += 1;\n    dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n      this.trigger('data_failed');\n    }.bind(this));\n  };\n\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\n  };\n\n  AnimationItem.prototype.preloadImages = function () {\n    this.imagePreloader.setAssetsPath(this.assetsPath);\n    this.imagePreloader.setPath(this.path);\n    this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n  };\n\n  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n\n    try {\n      this.animationData = animData;\n\n      if (this.initialSegment) {\n        this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n        this.firstFrame = Math.round(this.initialSegment[0]);\n      } else {\n        this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n        this.firstFrame = Math.round(this.animationData.ip);\n      }\n\n      this.renderer.configAnimation(animData);\n\n      if (!animData.assets) {\n        animData.assets = [];\n      }\n\n      this.assets = this.animationData.assets;\n      this.frameRate = this.animationData.fr;\n      this.frameMult = this.animationData.fr / 1000;\n      this.renderer.searchExtraCompositions(animData.assets);\n      this.markers = markerParser(animData.markers || []);\n      this.trigger('config_ready');\n      this.preloadImages();\n      this.loadSegments();\n      this.updaFrameModifier();\n      this.waitForFontsLoaded();\n\n      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\n    }\n  };\n\n  AnimationItem.prototype.checkLoaded = function () {\n    if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n      this.isLoaded = true;\n      var expressionsPlugin = getExpressionsPlugin();\n\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n\n      if (this.autoplay) {\n        this.play();\n      }\n    }\n  };\n\n  AnimationItem.prototype.resize = function (width, height) {\n    // Adding this validation for backwards compatibility in case an event object was being passed down\n    var _width = typeof width === 'number' ? width : undefined;\n\n    var _height = typeof height === 'number' ? height : undefined;\n\n    this.renderer.updateContainerSize(_width, _height);\n  };\n\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\n  };\n\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted;\n    }\n\n    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n\n    try {\n      if (this.expressionsPlugin) {\n        this.expressionsPlugin.resetFrame();\n      }\n\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_play');\n      this.audioController.resume();\n\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === false) {\n      this.isPaused = true;\n      this.trigger('_pause');\n      this._idle = true;\n      this.trigger('_idle');\n      this.audioController.pause();\n    }\n  };\n\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        this.goToAndStop(marker.time, true);\n      }\n    } else if (isFrame) {\n      this.setCurrentRawFrameValue(value);\n    } else {\n      this.setCurrentRawFrameValue(value * this.frameModifier);\n    }\n\n    this.pause();\n  };\n\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        if (!marker.duration) {\n          this.goToAndStop(marker.time, true);\n        } else {\n          this.playSegments([marker.time, marker.time + marker.duration], true);\n        }\n      }\n    } else {\n      this.goToAndStop(numValue, isFrame, name);\n    }\n\n    this.play();\n  };\n\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n    // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n    if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n      if (!this.loop || this.playCount === this.loop) {\n        if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n          _isComplete = true;\n          nextValue = this.totalFrames - 1;\n        }\n      } else if (nextValue >= this.totalFrames) {\n        this.playCount += 1;\n\n        if (!this.checkSegments(nextValue % this.totalFrames)) {\n          this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n          this._completedLoop = true;\n          this.trigger('loopComplete');\n        }\n      } else {\n        this.setCurrentRawFrameValue(nextValue);\n      }\n    } else if (nextValue < 0) {\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\n        if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n          // eslint-disable-line no-plusplus\n          this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n          if (!this._completedLoop) {\n            this._completedLoop = true;\n          } else {\n            this.trigger('loopComplete');\n          }\n        } else {\n          _isComplete = true;\n          nextValue = 0;\n        }\n      }\n    } else {\n      this.setCurrentRawFrameValue(nextValue);\n    }\n\n    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\n\n    if (arr[1] < arr[0]) {\n      if (this.frameModifier > 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(-1);\n        }\n      }\n\n      this.totalFrames = arr[0] - arr[1];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[1];\n      this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n    } else if (arr[1] > arr[0]) {\n      if (this.frameModifier < 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(1);\n        }\n      }\n\n      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n\n    this.trigger('segmentStart');\n  };\n\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\n\n    if (this.isPaused) {\n      if (this.currentRawFrame + this.firstFrame < init) {\n        pendingFrame = init;\n      } else if (this.currentRawFrame + this.firstFrame > end) {\n        pendingFrame = end - init;\n      }\n    }\n\n    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n\n    if (_typeof$4(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n\n    if (forceFlag) {\n      this.checkSegments(0);\n    }\n  };\n\n  AnimationItem.prototype.checkSegments = function (offset) {\n    if (this.segments.length) {\n      this.adjustSegment(this.segments.shift(), offset);\n      return true;\n    }\n\n    return false;\n  };\n\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\n    }\n\n    this.renderer.destroy();\n    this.imagePreloader.destroy();\n    this.trigger('destroy');\n    this._cbs = null;\n    this.onEnterFrame = null;\n    this.onLoopComplete = null;\n    this.onComplete = null;\n    this.onSegmentStart = null;\n    this.onDestroy = null;\n    this.renderer = null;\n    this.expressionsPlugin = null;\n    this.imagePreloader = null;\n    this.projectInterface = null;\n  };\n\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setLoop = function (isLooping) {\n    this.loop = isLooping;\n  };\n\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.setVolume(val);\n  };\n\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.mute();\n  };\n\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.unmute();\n  };\n\n  AnimationItem.prototype.updaFrameModifier = function () {\n    this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n    this.audioController.setRate(this.playSpeed * this.playDirection);\n  };\n\n  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n\n    return path;\n  };\n\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n  };\n\n  AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n    try {\n      var element = this.renderer.getElementByPath(path);\n      element.updateDocumentData(documentData, index);\n    } catch (error) {// TODO: decide how to handle catch case\n    }\n  };\n\n  AnimationItem.prototype.trigger = function (name) {\n    if (this._cbs && this._cbs[name]) {\n      switch (name) {\n        case 'enterFrame':\n          this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n          break;\n\n        case 'drawnFrame':\n          this.drawnFrameEvent.currentTime = this.currentFrame;\n          this.drawnFrameEvent.totalTime = this.totalFrames;\n          this.drawnFrameEvent.direction = this.frameModifier;\n          this.triggerEvent(name, this.drawnFrameEvent);\n          break;\n\n        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n\n        default:\n          this.triggerEvent(name);\n      }\n    }\n\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  var animationManager = function () {\n    var moduleOb = {};\n    var registeredAnimations = [];\n    var initTime = 0;\n    var len = 0;\n    var playingAnimationsNum = 0;\n    var _stopped = true;\n    var _isFrozen = false;\n\n    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n\n        i += 1;\n      }\n    }\n\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n\n      var i = 0;\n\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n\n        i += 1;\n      }\n\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n\n      return animations;\n    }\n\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\n    }\n\n    function setupAnimation(animItem, element) {\n      animItem.addEventListener('destroy', removeElement);\n      animItem.addEventListener('_active', addPlayingCount);\n      animItem.addEventListener('_idle', subtractPlayingCount);\n      registeredAnimations.push({\n        elem: element,\n        animation: animItem\n      });\n      len += 1;\n    }\n\n    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n\n    function setSpeed(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n\n    function setDirection(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n\n    function play(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n\n      initTime = nowTime;\n\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n\n    function pause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n\n    function stop(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n\n    function togglePause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n\n    function destroy(animation) {\n      var i;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\n      }\n    }\n\n    function searchAnimations(animationData, standalone, renderer) {\n      var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n      var i;\n      var lenAnims = animElements.length;\n\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n\n        registerAnimation(animElements[i], animationData);\n      }\n\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\n        }\n\n        var body = document.getElementsByTagName('body')[0];\n        body.innerText = '';\n        var div = createTag('div');\n        div.style.width = '100%';\n        div.style.height = '100%';\n        div.setAttribute('data-bm-type', renderer);\n        body.appendChild(div);\n        registerAnimation(div, animationData);\n      }\n    }\n\n    function resize() {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n\n    function freeze() {\n      _isFrozen = true;\n    }\n\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n\n    function setVolume(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n\n    function mute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n\n    function unmute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\n      }\n    }\n\n    moduleOb.registerAnimation = registerAnimation;\n    moduleOb.loadAnimation = loadAnimation;\n    moduleOb.setSpeed = setSpeed;\n    moduleOb.setDirection = setDirection;\n    moduleOb.play = play;\n    moduleOb.pause = pause;\n    moduleOb.stop = stop;\n    moduleOb.togglePause = togglePause;\n    moduleOb.searchAnimations = searchAnimations;\n    moduleOb.resize = resize; // moduleOb.start = start;\n\n    moduleOb.goToAndStop = goToAndStop;\n    moduleOb.destroy = destroy;\n    moduleOb.freeze = freeze;\n    moduleOb.unfreeze = unfreeze;\n    moduleOb.setVolume = setVolume;\n    moduleOb.mute = mute;\n    moduleOb.unmute = unmute;\n    moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n    return moduleOb;\n  }();\n\n  /* eslint-disable */\n  var BezierFactory = function () {\n    /**\r\n       * BezierEasing - use bezier curve for transition easing function\r\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n       *\r\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n       * Usage:\r\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n       *\r\n       */\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n      if (beziers[str]) {\n        return beziers[str];\n      }\n\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n    var NEWTON_ITERATIONS = 4;\n    var NEWTON_MIN_SLOPE = 0.001;\n    var SUBDIVISION_PRECISION = 0.0000001;\n    var SUBDIVISION_MAX_ITERATIONS = 10;\n    var kSplineTableSize = 11;\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n    var float32ArraySupported = typeof Float32Array === 'function';\n\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n\n    function C(aA1) {\n      return 3.0 * aA1;\n    } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n    function getSlope(aT, aA1, aA2) {\n      return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n    }\n\n    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n          currentT,\n          i = 0;\n\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n        if (currentX > 0.0) {\n          aB = currentT;\n        } else {\n          aA = currentT;\n        }\n      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n      return currentT;\n    }\n\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n      for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n        var currentSlope = getSlope(aGuessT, mX1, mX2);\n        if (currentSlope === 0.0) return aGuessT;\n        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n        aGuessT -= currentX / currentSlope;\n      }\n\n      return aGuessT;\n    }\n    /**\r\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n       */\n\n\n    function BezierEasing(points) {\n      this._p = points;\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      this._precomputed = false;\n      this.get = this.get.bind(this);\n    }\n\n    BezierEasing.prototype = {\n      get: function get(x) {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        if (!this._precomputed) this._precompute();\n        if (mX1 === mY1 && mX2 === mY2) return x; // linear\n        // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n      _precompute: function _precompute() {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        this._precomputed = true;\n\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues();\n        }\n      },\n      _calcSampleValues: function _calcSampleValues() {\n        var mX1 = this._p[0],\n            mX2 = this._p[2];\n\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n\n      /**\r\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n           */\n      _getTForX: function _getTForX(aX) {\n        var mX1 = this._p[0],\n            mX2 = this._p[2],\n            mSampleValues = this._mSampleValues;\n        var intervalStart = 0.0;\n        var currentSample = 1;\n        var lastSample = kSplineTableSize - 1;\n\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n\n        --currentSample; // Interpolate to provide an initial guess for t\n\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n        var guessForT = intervalStart + dist * kSampleStepSize;\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n\n        if (initialSlope === 0.0) {\n          return guessForT;\n        }\n\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n    };\n    return ob;\n  }();\n\n  var pooling = function () {\n    function _double(arr) {\n      return arr.concat(createSizedArray(arr.length));\n    }\n\n    return {\n      \"double\": _double\n    };\n  }();\n\n  var poolFactory = function () {\n    return function (initialLength, _create, _release) {\n      var _length = 0;\n      var _maxLength = initialLength;\n      var pool = createSizedArray(_maxLength);\n      var ob = {\n        newElement: newElement,\n        release: release\n      };\n\n      function newElement() {\n        var element;\n\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n\n        return element;\n      }\n\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n\n        if (_release) {\n          _release(element);\n        }\n\n        pool[_length] = element;\n        _length += 1;\n      }\n\n      return ob;\n    };\n  }();\n\n  var bezierLengthPool = function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments())\n      };\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n\n      element.lengths.length = 0;\n    }\n\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\n\n    function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n      var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n      return det1 > -0.001 && det1 < 0.001;\n    }\n\n    function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n      if (z1 === 0 && z2 === 0 && z3 === 0) {\n        return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n      }\n\n      var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n      var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n      var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n      var diffDist;\n\n      if (dist1 > dist2) {\n        if (dist1 > dist3) {\n          diffDist = dist1 - dist2 - dist3;\n        } else {\n          diffDist = dist3 - dist2 - dist1;\n        }\n      } else if (dist3 > dist2) {\n        diffDist = dist3 - dist2 - dist1;\n      } else {\n        diffDist = dist2 - dist1 - dist3;\n      }\n\n      return diffDist > -0.0001 && diffDist < 0.0001;\n    }\n\n    var getBezierLength = function () {\n      return function (pt1, pt2, pt3, pt4) {\n        var curveSegments = getDefaultCurveSegments();\n        var k;\n        var i;\n        var len;\n        var ptCoord;\n        var perc;\n        var addedLength = 0;\n        var ptDistance;\n        var point = [];\n        var lastPoint = [];\n        var lengthData = bezierLengthPool.newElement();\n        len = pt3.length;\n\n        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\n\n          for (i = 0; i < len; i += 1) {\n            ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n            point[i] = ptCoord;\n\n            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n\n            lastPoint[i] = point[i];\n          }\n\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n\n        lengthData.addedLength = addedLength;\n        return lengthData;\n      };\n    }();\n\n    function getSegmentsLength(shapeData) {\n      var segmentsLength = segmentsLengthPool.newElement();\n      var closed = shapeData.c;\n      var pathV = shapeData.v;\n      var pathO = shapeData.o;\n      var pathI = shapeData.i;\n      var i;\n      var len = shapeData._length;\n      var lengths = segmentsLength.lengths;\n      var totalLength = 0;\n\n      for (i = 0; i < len - 1; i += 1) {\n        lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\n    }\n\n    var buildBezierData = function () {\n      var storedData = {};\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n        if (!storedData[bezierName]) {\n          var curveSegments = getDefaultCurveSegments();\n          var k;\n          var i;\n          var len;\n          var ptCoord;\n          var perc;\n          var addedLength = 0;\n          var ptDistance;\n          var point;\n          var lastPoint = null;\n\n          if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n            curveSegments = 2;\n          }\n\n          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\n\n            for (i = 0; i < len; i += 1) {\n              ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n              point[i] = ptCoord;\n\n              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n\n        return storedData[bezierName];\n      };\n    }();\n\n    function getDistancePerc(perc, bezierData) {\n      var percents = bezierData.percents;\n      var lengths = bezierData.lengths;\n      var len = percents.length;\n      var initPos = bmFloor((len - 1) * perc);\n      var lengthPos = perc * bezierData.addedLength;\n      var lPerc = 0;\n\n      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\n\n      while (flag) {\n        if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n          lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n          flag = false;\n        } else {\n          initPos += dir;\n        }\n\n        if (initPos < 0 || initPos >= len - 1) {\n          // FIX for TypedArrays that don't store floating point values with enough accuracy\n          if (initPos === len - 1) {\n            return percents[initPos];\n          }\n\n          flag = false;\n        }\n      }\n\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n    }\n\n    function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n      var t1 = getDistancePerc(percent, bezierData);\n      var u1 = 1 - t1;\n      var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n      var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n      return [ptX, ptY];\n    }\n\n    var bezierSegmentPoints = createTypedArray('float32', 8);\n\n    function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n      if (startPerc < 0) {\n        startPerc = 0;\n      } else if (startPerc > 1) {\n        startPerc = 1;\n      }\n\n      var t0 = getDistancePerc(startPerc, bezierData);\n      endPerc = endPerc > 1 ? 1 : endPerc;\n      var t1 = getDistancePerc(endPerc, bezierData);\n      var i;\n      var len = pt1.length;\n      var u0 = 1 - t0;\n      var u1 = 1 - t1;\n      var u0u0u0 = u0 * u0 * u0;\n      var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0t0 = t0 * t0 * t0; //\n\n      var u0u0u1 = u0 * u0 * u1;\n      var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0t1 = t0 * t0 * t1; //\n\n      var u0u1u1 = u0 * u1 * u1;\n      var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1t1 = t0 * t1 * t1; //\n\n      var u1u1u1 = u1 * u1 * u1;\n      var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1t1 = t1 * t1 * t1;\n\n      for (i = 0; i < len; i += 1) {\n        bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n      }\n\n      return bezierSegmentPoints;\n    }\n\n    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n\n  var bez = bezFunction();\n\n  var initFrame = initialDefaultFrame;\n  var mathAbs = Math.abs;\n\n  function interpolateValue(frameNum, caching) {\n    var offsetTime = this.offsetTime;\n    var newValue;\n\n    if (this.propType === 'multidimensional') {\n      newValue = createTypedArray('float32', this.pv.length);\n    }\n\n    var iterationIndex = caching.lastIndex;\n    var i = iterationIndex;\n    var len = this.keyframes.length - 1;\n    var flag = true;\n    var keyData;\n    var nextKeyData;\n    var keyframeMetadata;\n\n    while (flag) {\n      keyData = this.keyframes[i];\n      nextKeyData = this.keyframes[i + 1];\n\n      if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n        if (keyData.h) {\n          keyData = nextKeyData;\n        }\n\n        iterationIndex = 0;\n        break;\n      }\n\n      if (nextKeyData.t - offsetTime > frameNum) {\n        iterationIndex = i;\n        break;\n      }\n\n      if (i < len - 1) {\n        i += 1;\n      } else {\n        iterationIndex = 0;\n        flag = false;\n      }\n    }\n\n    keyframeMetadata = this.keyframesMetadata[i] || {};\n    var k;\n    var kLen;\n    var perc;\n    var jLen;\n    var j;\n    var fnc;\n    var nextKeyTime = nextKeyData.t - offsetTime;\n    var keyTime = keyData.t - offsetTime;\n    var endValue;\n\n    if (keyData.to) {\n      if (!keyframeMetadata.bezierData) {\n        keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n      }\n\n      var bezierData = keyframeMetadata.bezierData;\n\n      if (frameNum >= nextKeyTime || frameNum < keyTime) {\n        var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n        kLen = bezierData.points[ind].point.length;\n\n        for (k = 0; k < kLen; k += 1) {\n          newValue[k] = bezierData.points[ind].point[k];\n        } // caching._lastKeyframeIndex = -1;\n\n      } else {\n        if (keyframeMetadata.__fnct) {\n          fnc = keyframeMetadata.__fnct;\n        } else {\n          fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n          keyframeMetadata.__fnct = fnc;\n        }\n\n        perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n        var distanceInLine = bezierData.segmentLength * perc;\n        var segmentPerc;\n        var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n        j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n        flag = true;\n        jLen = bezierData.points.length;\n\n        while (flag) {\n          addedLength += bezierData.points[j].partialLength;\n\n          if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k];\n            }\n\n            break;\n          } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n            segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n            }\n\n            break;\n          }\n\n          if (j < jLen - 1) {\n            j += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        caching._lastPoint = j;\n        caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n        caching._lastKeyframeIndex = i;\n      }\n    } else {\n      var outX;\n      var outY;\n      var inX;\n      var inY;\n      var keyValue;\n      len = keyData.s.length;\n      endValue = nextKeyData.s || keyData.e;\n\n      if (this.sh && keyData.h !== 1) {\n        if (frameNum >= nextKeyTime) {\n          newValue[0] = endValue[0];\n          newValue[1] = endValue[1];\n          newValue[2] = endValue[2];\n        } else if (frameNum <= keyTime) {\n          newValue[0] = keyData.s[0];\n          newValue[1] = keyData.s[1];\n          newValue[2] = keyData.s[2];\n        } else {\n          var quatStart = createQuaternion(keyData.s);\n          var quatEnd = createQuaternion(endValue);\n          var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n          quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n        }\n      } else {\n        for (i = 0; i < len; i += 1) {\n          if (keyData.h !== 1) {\n            if (frameNum >= nextKeyTime) {\n              perc = 1;\n            } else if (frameNum < keyTime) {\n              perc = 0;\n            } else {\n              if (keyData.o.x.constructor === Array) {\n                if (!keyframeMetadata.__fnct) {\n                  keyframeMetadata.__fnct = [];\n                }\n\n                if (!keyframeMetadata.__fnct[i]) {\n                  outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n                  outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n                  inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n                  inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n                  fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                  keyframeMetadata.__fnct[i] = fnc;\n                } else {\n                  fnc = keyframeMetadata.__fnct[i];\n                }\n              } else if (!keyframeMetadata.__fnct) {\n                outX = keyData.o.x;\n                outY = keyData.o.y;\n                inX = keyData.i.x;\n                inY = keyData.i.y;\n                fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                keyData.keyframeMetadata = fnc;\n              } else {\n                fnc = keyframeMetadata.__fnct;\n              }\n\n              perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n            }\n          }\n\n          endValue = nextKeyData.s || keyData.e;\n          keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n          if (this.propType === 'multidimensional') {\n            newValue[i] = keyValue;\n          } else {\n            newValue = keyValue;\n          }\n        }\n      }\n    }\n\n    caching.lastIndex = iterationIndex;\n    return newValue;\n  } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n  function slerp(a, b, t) {\n    var out = [];\n    var ax = a[0];\n    var ay = a[1];\n    var az = a[2];\n    var aw = a[3];\n    var bx = b[0];\n    var by = b[1];\n    var bz = b[2];\n    var bw = b[3];\n    var omega;\n    var cosom;\n    var sinom;\n    var scale0;\n    var scale1;\n    cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n    if (cosom < 0.0) {\n      cosom = -cosom;\n      bx = -bx;\n      by = -by;\n      bz = -bz;\n      bw = -bw;\n    }\n\n    if (1.0 - cosom > 0.000001) {\n      omega = Math.acos(cosom);\n      sinom = Math.sin(omega);\n      scale0 = Math.sin((1.0 - t) * omega) / sinom;\n      scale1 = Math.sin(t * omega) / sinom;\n    } else {\n      scale0 = 1.0 - t;\n      scale1 = t;\n    }\n\n    out[0] = scale0 * ax + scale1 * bx;\n    out[1] = scale0 * ay + scale1 * by;\n    out[2] = scale0 * az + scale1 * bz;\n    out[3] = scale0 * aw + scale1 * bw;\n    return out;\n  }\n\n  function quaternionToEuler(out, quat) {\n    var qx = quat[0];\n    var qy = quat[1];\n    var qz = quat[2];\n    var qw = quat[3];\n    var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n    var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n    out[0] = heading / degToRads;\n    out[1] = attitude / degToRads;\n    out[2] = bank / degToRads;\n  }\n\n  function createQuaternion(values) {\n    var heading = values[0] * degToRads;\n    var attitude = values[1] * degToRads;\n    var bank = values[2] * degToRads;\n    var c1 = Math.cos(heading / 2);\n    var c2 = Math.cos(attitude / 2);\n    var c3 = Math.cos(bank / 2);\n    var s1 = Math.sin(heading / 2);\n    var s2 = Math.sin(attitude / 2);\n    var s3 = Math.sin(bank / 2);\n    var w = c1 * c2 * c3 - s1 * s2 * s3;\n    var x = s1 * s2 * c3 + c1 * c2 * s3;\n    var y = s1 * c2 * c3 + c1 * s2 * s3;\n    var z = c1 * s2 * c3 - s1 * c2 * s3;\n    return [x, y, z, w];\n  }\n\n  function getValueAtCurrentTime() {\n    var frameNum = this.comp.renderedFrame - this.offsetTime;\n    var initTime = this.keyframes[0].t - this.offsetTime;\n    var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n    if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n      if (this._caching.lastFrame >= frameNum) {\n        this._caching._lastKeyframeIndex = -1;\n        this._caching.lastIndex = 0;\n      }\n\n      var renderResult = this.interpolateValue(frameNum, this._caching);\n      this.pv = renderResult;\n    }\n\n    this._caching.lastFrame = frameNum;\n    return this.pv;\n  }\n\n  function setVValue(val) {\n    var multipliedValue;\n\n    if (this.propType === 'unidimensional') {\n      multipliedValue = val * this.mult;\n\n      if (mathAbs(this.v - multipliedValue) > 0.00001) {\n        this.v = multipliedValue;\n        this._mdf = true;\n      }\n    } else {\n      var i = 0;\n      var len = this.v.length;\n\n      while (i < len) {\n        multipliedValue = val[i] * this.mult;\n\n        if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n          this.v[i] = multipliedValue;\n          this._mdf = true;\n        }\n\n        i += 1;\n      }\n    }\n  }\n\n  function processEffectsSequence() {\n    if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n      return;\n    }\n\n    if (this.lock) {\n      this.setVValue(this.pv);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = this._isFirstFrame;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = this.kf ? this.pv : this.data.k;\n\n    for (i = 0; i < len; i += 1) {\n      finalValue = this.effectsSequence[i](finalValue);\n    }\n\n    this.setVValue(finalValue);\n    this._isFirstFrame = false;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  }\n\n  function addEffect(effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.container.addDynamicProperty(this);\n  }\n\n  function ValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this.v = mult ? data.k * mult : data.k;\n    this.pv = data.k;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.vel = 0;\n    this.effectsSequence = [];\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function MultiDimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.frameId = -1;\n    var i;\n    var len = data.k.length;\n    this.v = createTypedArray('float32', len);\n    this.pv = createTypedArray('float32', len);\n    this.vel = createTypedArray('float32', len);\n\n    for (i = 0; i < len; i += 1) {\n      this.v[i] = data.k[i] * this.mult;\n      this.pv[i] = data.k[i];\n    }\n\n    this._isFirstFrame = true;\n    this.effectsSequence = [];\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.frameId = -1;\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: 0,\n      _lastKeyframeIndex: -1\n    };\n    this.k = true;\n    this.kf = true;\n    this.data = data;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.v = initFrame;\n    this.pv = initFrame;\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    var i;\n    var len = data.k.length;\n    var s;\n    var e;\n    var to;\n    var ti;\n\n    for (i = 0; i < len - 1; i += 1) {\n      if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n        s = data.k[i].s;\n        e = data.k[i + 1].s;\n        to = data.k[i].to;\n        ti = data.k[i].ti;\n\n        if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n          data.k[i].to = null;\n          data.k[i].ti = null;\n        }\n\n        if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n          if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n            data.k[i].to = null;\n            data.k[i].ti = null;\n          }\n        }\n      }\n    }\n\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.data = data;\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.k = true;\n    this.kf = true;\n    this._isFirstFrame = true;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.frameId = -1;\n    var arrLen = data.k[0].s.length;\n    this.v = createTypedArray('float32', arrLen);\n    this.pv = createTypedArray('float32', arrLen);\n\n    for (i = 0; i < arrLen; i += 1) {\n      this.v[i] = initFrame;\n      this.pv[i] = initFrame;\n    }\n\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: createTypedArray('float32', arrLen)\n    };\n    this.addEffect = addEffect;\n  }\n\n  var PropertyFactory = function () {\n    function getProp(elem, data, type, mult, container) {\n      if (data.sid) {\n        data = elem.globalData.slotManager.getProp(data);\n      }\n\n      var p;\n\n      if (!data.k.length) {\n        p = new ValueProperty(elem, data, mult, container);\n      } else if (typeof data.k[0] === 'number') {\n        p = new MultiDimensionalProperty(elem, data, mult, container);\n      } else {\n        switch (type) {\n          case 0:\n            p = new KeyframedValueProperty(elem, data, mult, container);\n            break;\n\n          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n\n      return p;\n    }\n\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\n\n  DynamicPropertyContainer.prototype = {\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n        this.container.addDynamicProperty(this);\n        this._isAnimated = true;\n      }\n    },\n    iterateDynamicProperties: function iterateDynamicProperties() {\n      this._mdf = false;\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\n\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    },\n    initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n      this.container = container;\n      this.dynamicProperties = [];\n      this._mdf = false;\n      this._isAnimated = false;\n    }\n  };\n\n  var pointPool = function () {\n    function create() {\n      return createTypedArray('float32', 2);\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  function ShapePath() {\n    this.c = false;\n    this._length = 0;\n    this._maxLength = 8;\n    this.v = createSizedArray(this._maxLength);\n    this.o = createSizedArray(this._maxLength);\n    this.i = createSizedArray(this._maxLength);\n  }\n\n  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\n\n    while (i < len) {\n      this.v[i] = pointPool.newElement();\n      this.o[i] = pointPool.newElement();\n      this.i[i] = pointPool.newElement();\n      i += 1;\n    }\n  };\n\n  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n\n    this._length = len;\n  };\n\n  ShapePath.prototype.doubleArrayLength = function () {\n    this.v = this.v.concat(createSizedArray(this._maxLength));\n    this.i = this.i.concat(createSizedArray(this._maxLength));\n    this.o = this.o.concat(createSizedArray(this._maxLength));\n    this._maxLength *= 2;\n  };\n\n  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n\n      case 'i':\n        arr = this.i;\n        break;\n\n      case 'o':\n        arr = this.o;\n        break;\n\n      default:\n        arr = [];\n        break;\n    }\n\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n\n    arr[pos][0] = x;\n    arr[pos][1] = y;\n  };\n\n  ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n    this.setXYAt(vX, vY, 'v', pos, replace);\n    this.setXYAt(oX, oY, 'o', pos, replace);\n    this.setXYAt(iX, iY, 'i', pos, replace);\n  };\n\n  ShapePath.prototype.reverse = function () {\n    var newPath = new ShapePath();\n    newPath.setPathData(this.c, this._length);\n    var vertices = this.v;\n    var outPoints = this.o;\n    var inPoints = this.i;\n    var init = 0;\n\n    if (this.c) {\n      newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n      init = 1;\n    }\n\n    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\n\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n      cnt -= 1;\n    }\n\n    return newPath;\n  };\n\n  ShapePath.prototype.length = function () {\n    return this._length;\n  };\n\n  var shapePool = function () {\n    function create() {\n      return new ShapePath();\n    }\n\n    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        pointPool.release(shapePath.v[i]);\n        pointPool.release(shapePath.i[i]);\n        pointPool.release(shapePath.o[i]);\n        shapePath.v[i] = null;\n        shapePath.i[i] = null;\n        shapePath.o[i] = null;\n      }\n\n      shapePath._length = 0;\n      shapePath.c = false;\n    }\n\n    function clone(shape) {\n      var cloned = factory.newElement();\n      var i;\n      var len = shape._length === undefined ? shape.v.length : shape._length;\n      cloned.setLength(len);\n      cloned.c = shape.c;\n\n      for (i = 0; i < len; i += 1) {\n        cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n      }\n\n      return cloned;\n    }\n\n    var factory = poolFactory(4, create, release);\n    factory.clone = clone;\n    return factory;\n  }();\n\n  function ShapeCollection() {\n    this._length = 0;\n    this._maxLength = 4;\n    this.shapes = createSizedArray(this._maxLength);\n  }\n\n  ShapeCollection.prototype.addShape = function (shapeData) {\n    if (this._length === this._maxLength) {\n      this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n      this._maxLength *= 2;\n    }\n\n    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\n    }\n\n    this._length = 0;\n  };\n\n  var shapeCollectionPool = function () {\n    var ob = {\n      newShapeCollection: newShapeCollection,\n      release: release\n    };\n    var _length = 0;\n    var _maxLength = 4;\n    var pool = createSizedArray(_maxLength);\n\n    function newShapeCollection() {\n      var shapeCollection;\n\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n\n      return shapeCollection;\n    }\n\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n\n      shapeCollection._length = 0;\n\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\n\n    function interpolateShape(frameNum, previousValue, caching) {\n      var iterationIndex = caching.lastIndex;\n      var keyPropS;\n      var keyPropE;\n      var isHold;\n      var j;\n      var k;\n      var jLen;\n      var kLen;\n      var perc;\n      var vertexValue;\n      var kf = this.keyframes;\n\n      if (frameNum < kf[0].t - this.offsetTime) {\n        keyPropS = kf[0].s[0];\n        isHold = true;\n        iterationIndex = 0;\n      } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n        keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n        /* if(kf[kf.length - 1].s){\r\n                  keyPropS = kf[kf.length - 1].s[0];\r\n              }else{\r\n                  keyPropS = kf[kf.length - 2].e[0];\r\n              } */\n\n        isHold = true;\n      } else {\n        var i = iterationIndex;\n        var len = kf.length - 1;\n        var flag = true;\n        var keyData;\n        var nextKeyData;\n        var keyframeMetadata;\n\n        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\n\n        if (!isHold) {\n          if (frameNum >= nextKeyData.t - this.offsetTime) {\n            perc = 1;\n          } else if (frameNum < keyData.t - this.offsetTime) {\n            perc = 0;\n          } else {\n            var fnc;\n\n            if (keyframeMetadata.__fnct) {\n              fnc = keyframeMetadata.__fnct;\n            } else {\n              fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n              keyframeMetadata.__fnct = fnc;\n            }\n\n            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n\n        keyPropS = keyData.s[0];\n      }\n\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\n\n      for (j = 0; j < jLen; j += 1) {\n        for (k = 0; k < kLen; k += 1) {\n          vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n          previousValue.i[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n          previousValue.o[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n          previousValue.v[j][k] = vertexValue;\n        }\n      }\n    }\n\n    function interpolateShapeCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      var lastFrame = this._caching.lastFrame;\n\n      if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n        /// /\n        this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n        this.interpolateShape(frameNum, this.pv, this._caching); /// /\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n\n      var i;\n      var len = shape1._length;\n\n      for (i = 0; i < len; i += 1) {\n        if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    function setVValue(newPath) {\n      if (!shapesEqual(this.v, newPath)) {\n        this.v = shapePool.clone(newPath);\n        this.localShapeCollection.releaseShapes();\n        this.localShapeCollection.addShape(this.v);\n        this._mdf = true;\n        this.paths = this.localShapeCollection;\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\n\n      if (this.kf) {\n        finalValue = this.pv;\n      } else if (this.data.ks) {\n        finalValue = this.data.ks.k;\n      } else {\n        finalValue = this.data.pt.k;\n      }\n\n      var i;\n      var len = this.effectsSequence.length;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function ShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.container = elem;\n      this.elem = elem;\n      this.data = data;\n      this.k = false;\n      this.kf = false;\n      this._mdf = false;\n      var pathData = type === 3 ? data.pt.k : data.ks.k;\n      this.v = shapePool.clone(pathData);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.reset = resetShape;\n      this.effectsSequence = [];\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\n\n    function KeyframedShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.elem = elem;\n      this.container = elem;\n      this.offsetTime = elem.data.st;\n      this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n      this.keyframesMetadata = [];\n      this.k = true;\n      this.kf = true;\n      var len = this.keyframes[0].s[0].i.length;\n      this.v = shapePool.newElement();\n      this.v.setPathData(this.keyframes[0].s[0].c, len);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.lastFrame = initFrame;\n      this.reset = resetShape;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0\n      };\n      this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n    }\n\n    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\n\n      function EllShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 4);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.paths = this.localShapeCollection;\n        this.localShapeCollection.addShape(this.v);\n        this.d = data.d;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertEllToPath();\n          }\n        },\n        convertEllToPath: function convertEllToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var s0 = this.s.v[0] / 2;\n          var s1 = this.s.v[1] / 2;\n\n          var _cw = this.d !== 3;\n\n          var _v = this.v;\n          _v.v[0][0] = p0;\n          _v.v[0][1] = p1 - s1;\n          _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.v[1][1] = p1;\n          _v.v[2][0] = p0;\n          _v.v[2][1] = p1 + s1;\n          _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.v[3][1] = p1;\n          _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.i[0][1] = p1 - s1;\n          _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.i[1][1] = p1 - s1 * cPoint;\n          _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.i[2][1] = p1 + s1;\n          _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.i[3][1] = p1 + s1 * cPoint;\n          _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.o[0][1] = p1 - s1;\n          _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.o[1][1] = p1 + s1 * cPoint;\n          _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.o[2][1] = p1 + s1;\n          _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.o[3][1] = p1 - s1 * cPoint;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n      return EllShapePropertyFactory;\n    }();\n\n    var StarShapeProperty = function () {\n      function StarShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 0);\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.data = data;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n\n        if (data.sy === 1) {\n          this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n          this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n          this.convertToPath = this.convertStarToPath;\n        } else {\n          this.convertToPath = this.convertPolygonToPath;\n        }\n\n        this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n        this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n        this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertToPath();\n          }\n        },\n        convertStarToPath: function convertStarToPath() {\n          var numPts = Math.floor(this.pt.v) * 2;\n          var angle = Math.PI * 2 / numPts;\n          /* this.v.v.length = numPts;\r\n                  this.v.i.length = numPts;\r\n                  this.v.o.length = numPts; */\n\n          var longFlag = true;\n          var longRad = this.or.v;\n          var shortRad = this.ir.v;\n          var longRound = this.os.v;\n          var shortRound = this.is.v;\n          var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n          var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n          var i;\n          var rad;\n          var roundness;\n          var perimSegment;\n          var currentAng = -Math.PI / 2;\n          currentAng += this.r.v;\n          var dir = this.data.d === 3 ? -1 : 1;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            rad = longFlag ? longRad : shortRad;\n            roundness = longFlag ? longRound : shortRound;\n            perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            /* this.v.v[i] = [x,y];\r\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n                      this.v._length = numPts; */\n\n            longFlag = !longFlag;\n            currentAng += angle * dir;\n          }\n        },\n        convertPolygonToPath: function convertPolygonToPath() {\n          var numPts = Math.floor(this.pt.v);\n          var angle = Math.PI * 2 / numPts;\n          var rad = this.or.v;\n          var roundness = this.os.v;\n          var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n          var i;\n          var currentAng = -Math.PI * 0.5;\n          var dir = this.data.d === 3 ? -1 : 1;\n          currentAng += this.r.v;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            currentAng += angle * dir;\n          }\n\n          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\n    }();\n\n    var RectShapeProperty = function () {\n      function RectShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.c = true;\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\n        }\n      }\n\n      RectShapePropertyFactory.prototype = {\n        convertRectToPath: function convertRectToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var v0 = this.s.v[0] / 2;\n          var v1 = this.s.v[1] / 2;\n          var round = bmMin(v0, v1, this.r.v);\n          var cPoint = round * (1 - roundCorner);\n          this.v._length = 0;\n\n          if (this.d === 2 || this.d === 1) {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n            }\n          } else {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n            }\n          }\n        },\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n\n    function getShapeProp(elem, data, type) {\n      var prop;\n\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\n\n        if (keys.length) {\n          prop = new KeyframedShapeProperty(elem, data, type);\n        } else {\n          prop = new ShapeProperty(elem, data, type);\n        }\n      } else if (type === 5) {\n        prop = new RectShapeProperty(elem, data);\n      } else if (type === 6) {\n        prop = new EllShapeProperty(elem, data);\n      } else if (type === 7) {\n        prop = new StarShapeProperty(elem, data);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    }\n\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\r\n   Transformation Matrix v2.0\r\n   (c) Epistemex 2014-2015\r\n   www.epistemex.com\r\n   By Ken Fyrstenberg\r\n   Contributions by leeoniya.\r\n   License: MIT, header required.\r\n   */\n\n  /**\r\n   * 2D transformation matrix object initialized with identity matrix.\r\n   *\r\n   * The matrix can synchronize a canvas context by supplying the context\r\n   * as an argument, or later apply current absolute transform to an\r\n   * existing context.\r\n   *\r\n   * All values are handled as floating point values.\r\n   *\r\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n   * @prop {number} a - scale x\r\n   * @prop {number} b - shear y\r\n   * @prop {number} c - shear x\r\n   * @prop {number} d - scale y\r\n   * @prop {number} e - translate x\r\n   * @prop {number} f - translate y\r\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n   * @constructor\r\n   */\n\n  var Matrix = function () {\n    var _cos = Math.cos;\n    var _sin = Math.sin;\n    var _tan = Math.tan;\n    var _rnd = Math.round;\n\n    function reset() {\n      this.props[0] = 1;\n      this.props[1] = 0;\n      this.props[2] = 0;\n      this.props[3] = 0;\n      this.props[4] = 0;\n      this.props[5] = 1;\n      this.props[6] = 0;\n      this.props[7] = 0;\n      this.props[8] = 0;\n      this.props[9] = 0;\n      this.props[10] = 1;\n      this.props[11] = 0;\n      this.props[12] = 0;\n      this.props[13] = 0;\n      this.props[14] = 0;\n      this.props[15] = 1;\n      return this;\n    }\n\n    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n    }\n\n    function scale(sx, sy, sz) {\n      if (!sz && sz !== 0) {\n        sz = 1;\n      }\n\n      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n    }\n\n    function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n      this.props[0] = a;\n      this.props[1] = b;\n      this.props[2] = c;\n      this.props[3] = d;\n      this.props[4] = e;\n      this.props[5] = f;\n      this.props[6] = g;\n      this.props[7] = h;\n      this.props[8] = i;\n      this.props[9] = j;\n      this.props[10] = k;\n      this.props[11] = l;\n      this.props[12] = m;\n      this.props[13] = n;\n      this.props[14] = o;\n      this.props[15] = p;\n      return this;\n    }\n\n    function translate(tx, ty, tz) {\n      tz = tz || 0;\n\n      if (tx !== 0 || ty !== 0 || tz !== 0) {\n        return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n      }\n\n      return this;\n    }\n\n    function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n      var _p = this.props;\n\n      if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n        // NOTE: commenting this condition because TurboFan deoptimizes code when present\n        // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n        _p[12] = _p[12] * a2 + _p[15] * m2;\n        _p[13] = _p[13] * f2 + _p[15] * n2;\n        _p[14] = _p[14] * k2 + _p[15] * o2;\n        _p[15] *= p2; // }\n\n        this._identityCalculated = false;\n        return this;\n      }\n\n      var a1 = _p[0];\n      var b1 = _p[1];\n      var c1 = _p[2];\n      var d1 = _p[3];\n      var e1 = _p[4];\n      var f1 = _p[5];\n      var g1 = _p[6];\n      var h1 = _p[7];\n      var i1 = _p[8];\n      var j1 = _p[9];\n      var k1 = _p[10];\n      var l1 = _p[11];\n      var m1 = _p[12];\n      var n1 = _p[13];\n      var o1 = _p[14];\n      var p1 = _p[15];\n      /* matrix order (canvas compatible):\r\n           * ace\r\n           * bdf\r\n           * 001\r\n           */\n\n      _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n      _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n      _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n      _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n      _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n      _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n      _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n      _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n      _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n      _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n      _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n      _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n      _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n      _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n      _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n      _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n      this._identityCalculated = false;\n      return this;\n    }\n\n    function multiply(matrix) {\n      var matrixProps = matrix.props;\n      return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n    }\n\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n        this._identityCalculated = true;\n      }\n\n      return this._identity;\n    }\n\n    function equals(matr) {\n      var i = 0;\n\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n\n        i += 1;\n      }\n\n      return true;\n    }\n\n    function clone(matr) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n\n      return matr;\n    }\n\n    function cloneFromProps(props) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\n      }\n    }\n\n    function applyToPoint(x, y, z) {\n      return {\n        x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n        y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n        z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n      };\n      /* return {\r\n           x: x * me.a + y * me.c + me.e,\r\n           y: x * me.b + y * me.d + me.f\r\n           }; */\n    }\n\n    function applyToX(x, y, z) {\n      return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n    }\n\n    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n    }\n\n    function applyToZ(x, y, z) {\n      return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n    }\n\n    function getInverseMatrix() {\n      var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n      var a = this.props[5] / determinant;\n      var b = -this.props[1] / determinant;\n      var c = -this.props[4] / determinant;\n      var d = this.props[0] / determinant;\n      var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n      var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n      var inverseMatrix = new Matrix();\n      inverseMatrix.props[0] = a;\n      inverseMatrix.props[1] = b;\n      inverseMatrix.props[4] = c;\n      inverseMatrix.props[5] = d;\n      inverseMatrix.props[12] = e;\n      inverseMatrix.props[13] = f;\n      return inverseMatrix;\n    }\n\n    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n\n      return retPts;\n    }\n\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\n\n      if (this.isIdentity()) {\n        arr[0] = pt1[0];\n        arr[1] = pt1[1];\n        arr[2] = pt2[0];\n        arr[3] = pt2[1];\n        arr[4] = pt3[0];\n        arr[5] = pt3[1];\n      } else {\n        var p0 = this.props[0];\n        var p1 = this.props[1];\n        var p4 = this.props[4];\n        var p5 = this.props[5];\n        var p12 = this.props[12];\n        var p13 = this.props[13];\n        arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n        arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n        arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n        arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n        arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n        arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n      }\n\n      return arr;\n    }\n\n    function applyToPointArray(x, y, z) {\n      var arr;\n\n      if (this.isIdentity()) {\n        arr = [x, y, z];\n      } else {\n        arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n      }\n\n      return arr;\n    }\n\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\n      }\n\n      var _p = this.props;\n      return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n    }\n\n    function toCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n\n      return cssValue;\n    }\n\n    function roundMatrixProperty(val) {\n      var v = 10000;\n\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n\n      return val;\n    }\n\n    function to2dCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var props = this.props;\n\n      var _a = roundMatrixProperty(props[0]);\n\n      var _b = roundMatrixProperty(props[1]);\n\n      var _c = roundMatrixProperty(props[4]);\n\n      var _d = roundMatrixProperty(props[5]);\n\n      var _e = roundMatrixProperty(props[12]);\n\n      var _f = roundMatrixProperty(props[13]);\n\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n    }\n\n    return function () {\n      this.reset = reset;\n      this.rotate = rotate;\n      this.rotateX = rotateX;\n      this.rotateY = rotateY;\n      this.rotateZ = rotateZ;\n      this.skew = skew;\n      this.skewFromAxis = skewFromAxis;\n      this.shear = shear;\n      this.scale = scale;\n      this.setTransform = setTransform;\n      this.translate = translate;\n      this.transform = transform;\n      this.multiply = multiply;\n      this.applyToPoint = applyToPoint;\n      this.applyToX = applyToX;\n      this.applyToY = applyToY;\n      this.applyToZ = applyToZ;\n      this.applyToPointArray = applyToPointArray;\n      this.applyToTriplePoints = applyToTriplePoints;\n      this.applyToPointStringified = applyToPointStringified;\n      this.toCSS = toCSS;\n      this.to2dCSS = to2dCSS;\n      this.clone = clone;\n      this.cloneFromProps = cloneFromProps;\n      this.equals = equals;\n      this.inversePoints = inversePoints;\n      this.inversePoint = inversePoint;\n      this.getInverseMatrix = getInverseMatrix;\n      this._t = this.transform;\n      this.isIdentity = isIdentity;\n      this._identity = true;\n      this._identityCalculated = false;\n      this.props = createTypedArray('float32', 16);\n      this.reset();\n    };\n  }();\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n\n    return animationManager.loadAnimation(params);\n  }\n\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n\n      case 'matrix':\n        return Matrix;\n\n      default:\n        return null;\n    }\n  }\n\n  lottie.play = animationManager.play;\n  lottie.pause = animationManager.pause;\n  lottie.setLocationHref = setLocation;\n  lottie.togglePause = animationManager.togglePause;\n  lottie.setSpeed = animationManager.setSpeed;\n  lottie.setDirection = animationManager.setDirection;\n  lottie.stop = animationManager.stop;\n  lottie.searchAnimations = searchAnimations;\n  lottie.registerAnimation = animationManager.registerAnimation;\n  lottie.loadAnimation = loadAnimation;\n  lottie.setSubframeRendering = setSubframeRendering;\n  lottie.resize = animationManager.resize; // lottie.start = start;\n\n  lottie.goToAndStop = animationManager.goToAndStop;\n  lottie.destroy = animationManager.destroy;\n  lottie.setQuality = setQuality;\n  lottie.inBrowser = inBrowser;\n  lottie.installPlugin = installPlugin;\n  lottie.freeze = animationManager.freeze;\n  lottie.unfreeze = animationManager.unfreeze;\n  lottie.setVolume = animationManager.setVolume;\n  lottie.mute = animationManager.mute;\n  lottie.unmute = animationManager.unmute;\n  lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n  lottie.useWebWorker = setWebWorker;\n  lottie.setIDPrefix = setPrefix;\n  lottie.__getFactory = getFactory;\n  lottie.version = '5.12.2';\n\n  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n\n    return null;\n  }\n\n  var queryString = '';\n\n  if (standalone) {\n    var scripts = document.getElementsByTagName('script');\n    var index = scripts.length - 1;\n    var myScript = scripts[index] || {\n      src: ''\n    };\n    queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n    renderer = getQueryVariable('renderer');\n  }\n\n  var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie;\n    }\n  } catch (err) {//\n  }\n\n  var ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n\n    return ob;\n  }();\n\n  function ShapeModifier() {}\n\n  ShapeModifier.prototype.initModifierProperties = function () {};\n\n  ShapeModifier.prototype.addShapeToModifier = function () {};\n\n  ShapeModifier.prototype.addShape = function (data) {\n    if (!this.closed) {\n      // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n      data.sh.container.addDynamicProperty(data.sh);\n      var shapeData = {\n        shape: data.sh,\n        data: data,\n        localShapeCollection: shapeCollectionPool.newShapeCollection()\n      };\n      this.shapes.push(shapeData);\n      this.addShapeToModifier(shapeData);\n\n      if (this._isAnimated) {\n        data.setAsAnimated();\n      }\n    }\n  };\n\n  ShapeModifier.prototype.init = function (elem, data) {\n    this.shapes = [];\n    this.elem = elem;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, data);\n    this.frameId = initialDefaultFrame;\n    this.closed = false;\n    this.k = false;\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n  function TrimModifier() {}\n\n  extendPrototype([ShapeModifier], TrimModifier);\n\n  TrimModifier.prototype.initModifierProperties = function (elem, data) {\n    this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n    this.sValue = 0;\n    this.eValue = 0;\n    this.getValue = this.processKeys;\n    this.m = data.m;\n    this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n  };\n\n  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\n\n    if (e <= 1) {\n      segments.push({\n        s: s,\n        e: e\n      });\n    } else if (s >= 1) {\n      segments.push({\n        s: s - 1,\n        e: e - 1\n      });\n    } else {\n      segments.push({\n        s: s,\n        e: 1\n      });\n      segments.push({\n        s: 0,\n        e: e - 1\n      });\n    }\n\n    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n\n    return shapeSegments;\n  };\n\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n\n    pathsData.length = 0;\n    return pathsData;\n  };\n\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n\n      if (o < 0) {\n        o += 1;\n      }\n\n      if (this.s.v > 1) {\n        s = 1 + o;\n      } else if (this.s.v < 0) {\n        s = 0 + o;\n      } else {\n        s = this.s.v + o;\n      }\n\n      if (this.e.v > 1) {\n        e = 1 + o;\n      } else if (this.e.v < 0) {\n        e = 0 + o;\n      } else {\n        e = this.e.v + o;\n      }\n\n      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\n      }\n\n      s = Math.round(s * 10000) * 0.0001;\n      e = Math.round(e * 10000) * 0.0001;\n      this.sValue = s;\n      this.eValue = e;\n    } else {\n      s = this.sValue;\n      e = this.eValue;\n    }\n\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var pathsData;\n    var pathData;\n    var totalShapeLength;\n    var totalModifierLength = 0;\n\n    if (e === s) {\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].localShapeCollection.releaseShapes();\n        this.shapes[i].shape._mdf = true;\n        this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n        if (this._mdf) {\n          this.shapes[i].pathsData.length = 0;\n        }\n      }\n    } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n      var segments = [];\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n        if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n          shapeData.shape.paths = shapeData.localShapeCollection;\n        } else {\n          shapePaths = shapeData.shape.paths;\n          jLen = shapePaths._length;\n          totalShapeLength = 0;\n\n          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\n\n            for (j = 0; j < jLen; j += 1) {\n              pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n              pathsData.push(pathData);\n              totalShapeLength += pathData.totalLength;\n            }\n\n            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n          if (this.m === 2 && len > 1) {\n            edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n            addedLength += shapeData.totalShapeLength;\n          } else {\n            edges = [[shapeS, shapeE]];\n          }\n\n          jLen = edges.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\n\n            if (shapeE <= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength * shapeE\n              });\n            } else if (shapeS >= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * (shapeS - 1),\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            } else {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength\n              });\n              segments.push({\n                s: 0,\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            }\n\n            var newShapesData = this.addShapes(shapeData, segments[0]);\n\n            if (segments[0].s !== segments[0].e) {\n              if (segments.length > 1) {\n                var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n                if (lastShapeInCollection.c) {\n                  var lastShape = newShapesData.pop();\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n                } else {\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1]);\n                }\n              }\n\n              this.addPaths(newShapesData, localShapeCollection);\n            }\n          }\n\n          shapeData.shape.paths = localShapeCollection;\n        }\n      }\n    } else if (this._mdf) {\n      for (i = 0; i < len; i += 1) {\n        // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n        // Don't remove this even if it's losing cached info.\n        this.shapes[i].pathsData.length = 0;\n        this.shapes[i].shape._mdf = true;\n      }\n    }\n  };\n\n  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\n    }\n  };\n\n  TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n    shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n    shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n    shapePath.setXYAt(points[1], points[5], 'o', pos);\n    shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n    var pathsData = shapeData.pathsData;\n    var shapePaths = shapeData.shape.paths.shapes;\n    var i;\n    var len = shapeData.shape.paths._length;\n    var j;\n    var jLen;\n    var addedLength = 0;\n    var currentLengthData;\n    var segmentCount;\n    var lengths;\n    var segment;\n    var shapes = [];\n    var initPos;\n    var newShape = true;\n\n    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n\n    shapes.push(shapePath);\n\n    for (i = 0; i < len; i += 1) {\n      lengths = pathsData[i].lengths;\n      shapePath.c = shapePaths[i].c;\n      jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n          addedLength += currentLengthData.addedLength;\n          shapePath.c = false;\n        } else if (addedLength > shapeSegment.e) {\n          shapePath.c = false;\n          break;\n        } else {\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\n\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\n      }\n\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n        shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n      }\n\n      if (addedLength > shapeSegment.e) {\n        break;\n      }\n\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n\n    return shapes;\n  };\n\n  function PuckerAndBloatModifier() {}\n\n  extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n  PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this._isAnimated = !!this.amount.effectsSequence.length;\n  };\n\n  PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n    var percent = amount / 100;\n    var centerPoint = [0, 0];\n    var pathLength = path._length;\n    var i = 0;\n\n    for (i = 0; i < pathLength; i += 1) {\n      centerPoint[0] += path.v[i][0];\n      centerPoint[1] += path.v[i][1];\n    }\n\n    centerPoint[0] /= pathLength;\n    centerPoint[1] /= pathLength;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < pathLength; i += 1) {\n      vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n      vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n      oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n      oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n      iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n      iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n      clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n    }\n\n    return clonedPath;\n  };\n\n  PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  var TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\n      }\n\n      if (this.r) {\n        mat.rotate(-this.r.v);\n      } else {\n        mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n      }\n\n      if (this.data.p.s) {\n        if (this.data.p.z) {\n          mat.translate(this.px.v, this.py.v, -this.pz.v);\n        } else {\n          mat.translate(this.px.v, this.py.v, 0);\n        }\n      } else {\n        mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n      }\n    }\n\n    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n\n      this.iterateDynamicProperties();\n\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\n        }\n\n        if (this.r && this.appliedTransformations < 4) {\n          this.v.rotate(-this.r.v);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        }\n\n        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\n\n          if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n            if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n              v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n              v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n            } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n              v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n              v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n            } else {\n              v1 = this.p.pv;\n              v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n            }\n          } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n            v1 = [];\n            v2 = [];\n            var px = this.px;\n            var py = this.py;\n\n            if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n              v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n              v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n              v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n              v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n            } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n              v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n              v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n              v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n              v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n            } else {\n              v1 = [px.pv, py.pv];\n              v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n              v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n            }\n          } else {\n            v2 = defaultVector;\n            v1 = v2;\n          }\n\n          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n        }\n\n        if (this.data.p && this.data.p.s) {\n          if (this.data.p.z) {\n            this.v.translate(this.px.v, this.py.v, -this.pz.v);\n          } else {\n            this.v.translate(this.px.v, this.py.v, 0);\n          }\n        } else {\n          this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n        }\n      }\n\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function precalculateMatrix() {\n      this.appliedTransformations = 0;\n      this.pre.reset();\n\n      if (!this.a.effectsSequence.length) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        this.appliedTransformations = 1;\n      } else {\n        return;\n      }\n\n      if (!this.s.effectsSequence.length) {\n        this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        this.appliedTransformations = 2;\n      } else {\n        return;\n      }\n\n      if (this.sk) {\n        if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n          this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n          this.appliedTransformations = 3;\n        } else {\n          return;\n        }\n      }\n\n      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v);\n          this.appliedTransformations = 4;\n        }\n      } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n        this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        this.appliedTransformations = 4;\n      }\n    }\n\n    function autoOrient() {//\n      // var prevP = this.getValueAtTime();\n    }\n\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\n    }\n\n    function TransformProperty(elem, data, container) {\n      this.elem = elem;\n      this.frameId = -1;\n      this.propType = 'transform';\n      this.data = data;\n      this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\n\n      if (data.p && data.p.s) {\n        this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n        this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n        if (data.p.z) {\n          this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n        }\n      } else {\n        this.p = PropertyFactory.getProp(elem, data.p || {\n          k: [0, 0, 0]\n        }, 1, 0, this);\n      }\n\n      if (data.rx) {\n        this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n        this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n        this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\n\n          for (i = 0; i < len; i += 1) {\n            data.or.k[i].to = null;\n            data.or.k[i].ti = null;\n          }\n        }\n\n        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\n      }\n\n      if (data.sk) {\n        this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n        this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n      }\n\n      this.a = PropertyFactory.getProp(elem, data.a || {\n        k: [0, 0, 0]\n      }, 1, 0, this);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: [100, 100, 100]\n      }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n      } else {\n        this.o = {\n          _mdf: false,\n          v: 1\n        };\n      }\n\n      this._isDirty = true;\n\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\n      }\n    }\n\n    TransformProperty.prototype = {\n      applyToMatrix: applyToMatrix,\n      getValue: processKeys,\n      precalculateMatrix: precalculateMatrix,\n      autoOrient: autoOrient\n    };\n    extendPrototype([DynamicPropertyContainer], TransformProperty);\n    TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n    TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  function RepeaterModifier() {}\n\n  extendPrototype([ShapeModifier], RepeaterModifier);\n\n  RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n    this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n    this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n    this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n    this.data = data;\n\n    if (!this.dynamicProperties.length) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = !!this.dynamicProperties.length;\n    this.pMatrix = new Matrix();\n    this.rMatrix = new Matrix();\n    this.sMatrix = new Matrix();\n    this.tMatrix = new Matrix();\n    this.matrix = new Matrix();\n  };\n\n  RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n    var dir = inv ? -1 : 1;\n    var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n    var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n    pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n    rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    rMatrix.rotate(-transform.r.v * dir * perc);\n    rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n    sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n    sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n  };\n\n  RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n    this.elem = elem;\n    this.arr = arr;\n    this.pos = pos;\n    this.elemsData = elemsData;\n    this._currentCopies = 0;\n    this._elements = [];\n    this._groups = [];\n    this.frameId = -1;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, arr[pos]);\n\n    while (pos > 0) {\n      pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n      this._elements.unshift(arr[pos]);\n    }\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  RepeaterModifier.prototype.resetElements = function (elements) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._processed = false;\n\n      if (elements[i].ty === 'gr') {\n        this.resetElements(elements[i].it);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.cloneElements = function (elements) {\n    var newElements = JSON.parse(JSON.stringify(elements));\n    this.resetElements(newElements);\n    return newElements;\n  };\n\n  RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._render = renderFlag;\n\n      if (elements[i].ty === 'gr') {\n        this.changeGroupRender(elements[i].it, renderFlag);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n    var items;\n    var itemsTransform;\n    var i;\n    var dir;\n    var cont;\n    var hasReloaded = false;\n\n    if (this._mdf || _isFirstFrame) {\n      var copies = Math.ceil(this.c.v);\n\n      if (this._groups.length < copies) {\n        while (this._groups.length < copies) {\n          var group = {\n            it: this.cloneElements(this._elements),\n            ty: 'gr'\n          };\n          group.it.push({\n            a: {\n              a: 0,\n              ix: 1,\n              k: [0, 0]\n            },\n            nm: 'Transform',\n            o: {\n              a: 0,\n              ix: 7,\n              k: 100\n            },\n            p: {\n              a: 0,\n              ix: 2,\n              k: [0, 0]\n            },\n            r: {\n              a: 1,\n              ix: 6,\n              k: [{\n                s: 0,\n                e: 0,\n                t: 0\n              }, {\n                s: 0,\n                e: 0,\n                t: 1\n              }]\n            },\n            s: {\n              a: 0,\n              ix: 3,\n              k: [100, 100]\n            },\n            sa: {\n              a: 0,\n              ix: 5,\n              k: 0\n            },\n            sk: {\n              a: 0,\n              ix: 4,\n              k: 0\n            },\n            ty: 'tr'\n          });\n          this.arr.splice(0, 0, group);\n\n          this._groups.splice(0, 0, group);\n\n          this._currentCopies += 1;\n        }\n\n        this.elem.reloadShapes();\n        hasReloaded = true;\n      }\n\n      cont = 0;\n      var renderFlag;\n\n      for (i = 0; i <= this._groups.length - 1; i += 1) {\n        renderFlag = cont < copies;\n        this._groups[i]._render = renderFlag;\n        this.changeGroupRender(this._groups[i].it, renderFlag);\n\n        if (!renderFlag) {\n          var elems = this.elemsData[i].it;\n          var transformData = elems[elems.length - 1];\n\n          if (transformData.transform.op.v !== 0) {\n            transformData.transform.op._mdf = true;\n            transformData.transform.op.v = 0;\n          } else {\n            transformData.transform.op._mdf = false;\n          }\n        }\n\n        cont += 1;\n      }\n\n      this._currentCopies = copies; /// /\n\n      var offset = this.o.v;\n      var offsetModulo = offset % 1;\n      var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n      var pProps = this.pMatrix.props;\n      var rProps = this.rMatrix.props;\n      var sProps = this.sMatrix.props;\n      this.pMatrix.reset();\n      this.rMatrix.reset();\n      this.sMatrix.reset();\n      this.tMatrix.reset();\n      this.matrix.reset();\n      var iteration = 0;\n\n      if (offset > 0) {\n        while (iteration < roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          iteration += 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n          iteration += offsetModulo;\n        }\n      } else if (offset < 0) {\n        while (iteration > roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n          iteration -= 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n          iteration -= offsetModulo;\n        }\n      }\n\n      i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n      dir = this.data.m === 1 ? 1 : -1;\n      cont = this._currentCopies;\n      var j;\n      var jLen;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        jLen = itemsTransform.length;\n        items[items.length - 1].transform.mProps._mdf = true;\n        items[items.length - 1].transform.op._mdf = true;\n        items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n        if (iteration !== 0) {\n          if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n            this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          }\n\n          this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n          this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n          this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n\n          this.matrix.reset();\n        } else {\n          this.matrix.reset();\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n        }\n\n        iteration += 1;\n        cont -= 1;\n        i += dir;\n      }\n    } else {\n      cont = this._currentCopies;\n      i = 0;\n      dir = 1;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        items[items.length - 1].transform.mProps._mdf = false;\n        items[items.length - 1].transform.op._mdf = false;\n        cont -= 1;\n        i += dir;\n      }\n    }\n\n    return hasReloaded;\n  };\n\n  RepeaterModifier.prototype.addShape = function () {};\n\n  function RoundCornersModifier() {}\n\n  extendPrototype([ShapeModifier], RoundCornersModifier);\n\n  RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this._isAnimated = !!this.rd.effectsSequence.length;\n  };\n\n  RoundCornersModifier.prototype.processPath = function (path, round) {\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var i;\n    var len = path._length;\n    var currentV;\n    var currentI;\n    var currentO;\n    var closerV;\n    var distance;\n    var newPosPerc;\n    var index = 0;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < len; i += 1) {\n      currentV = path.v[i];\n      currentO = path.o[i];\n      currentI = path.i[i];\n\n      if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n        if ((i === 0 || i === len - 1) && !path.c) {\n          clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n          /* clonedPath.v[index] = currentV;\r\n                  clonedPath.o[index] = currentO;\r\n                  clonedPath.i[index] = currentI; */\n\n          index += 1;\n        } else {\n          if (i === 0) {\n            closerV = path.v[len - 1];\n          } else {\n            closerV = path.v[i - 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = iX;\n          iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n          vY = iY;\n          oX = vX - (vX - currentV[0]) * roundCorner;\n          oY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n\n          if (i === len - 1) {\n            closerV = path.v[0];\n          } else {\n            closerV = path.v[i + 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = oX;\n          oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n          vY = oY;\n          iX = vX - (vX - currentV[0]) * roundCorner;\n          iY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n        }\n      } else {\n        clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n        index += 1;\n      }\n    }\n\n    return clonedPath;\n  };\n\n  RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var rd = this.rd.v;\n\n    if (rd !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function floatEqual(a, b) {\n    return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n  }\n\n  function floatZero(f) {\n    return Math.abs(f) <= 0.00001;\n  }\n\n  function lerp(p0, p1, amount) {\n    return p0 * (1 - amount) + p1 * amount;\n  }\n\n  function lerpPoint(p0, p1, amount) {\n    return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n  }\n\n  function quadRoots(a, b, c) {\n    // no root\n    if (a === 0) return [];\n    var s = b * b - 4 * a * c; // Complex roots\n\n    if (s < 0) return [];\n    var singleRoot = -b / (2 * a); // 1 root\n\n    if (s === 0) return [singleRoot];\n    var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n    return [singleRoot - delta, singleRoot + delta];\n  }\n\n  function polynomialCoefficients(p0, p1, p2, p3) {\n    return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n  }\n\n  function singlePoint(p) {\n    return new PolynomialBezier(p, p, p, p, false);\n  }\n\n  function PolynomialBezier(p0, p1, p2, p3, linearize) {\n    if (linearize && pointEqual(p0, p1)) {\n      p1 = lerpPoint(p0, p3, 1 / 3);\n    }\n\n    if (linearize && pointEqual(p2, p3)) {\n      p2 = lerpPoint(p0, p3, 2 / 3);\n    }\n\n    var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n    var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n    this.a = [coeffx[0], coeffy[0]];\n    this.b = [coeffx[1], coeffy[1]];\n    this.c = [coeffx[2], coeffy[2]];\n    this.d = [coeffx[3], coeffy[3]];\n    this.points = [p0, p1, p2, p3];\n  }\n\n  PolynomialBezier.prototype.point = function (t) {\n    return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n  };\n\n  PolynomialBezier.prototype.derivative = function (t) {\n    return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n  };\n\n  PolynomialBezier.prototype.tangentAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[1], p[0]);\n  };\n\n  PolynomialBezier.prototype.normalAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[0], p[1]);\n  };\n\n  PolynomialBezier.prototype.inflectionPoints = function () {\n    var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n    if (floatZero(denom)) return [];\n    var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n    var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n    if (square < 0) return [];\n    var root = Math.sqrt(square);\n\n    if (floatZero(root)) {\n      if (root > 0 && root < 1) return [tcusp];\n      return [];\n    }\n\n    return [tcusp - root, tcusp + root].filter(function (r) {\n      return r > 0 && r < 1;\n    });\n  };\n\n  PolynomialBezier.prototype.split = function (t) {\n    if (t <= 0) return [singlePoint(this.points[0]), this];\n    if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n    var p10 = lerpPoint(this.points[0], this.points[1], t);\n    var p11 = lerpPoint(this.points[1], this.points[2], t);\n    var p12 = lerpPoint(this.points[2], this.points[3], t);\n    var p20 = lerpPoint(p10, p11, t);\n    var p21 = lerpPoint(p11, p12, t);\n    var p3 = lerpPoint(p20, p21, t);\n    return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n  };\n\n  function extrema(bez, comp) {\n    var min = bez.points[0][comp];\n    var max = bez.points[bez.points.length - 1][comp];\n\n    if (min > max) {\n      var e = max;\n      max = min;\n      min = e;\n    } // Derivative roots to find min/max\n\n\n    var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n    for (var i = 0; i < f.length; i += 1) {\n      if (f[i] > 0 && f[i] < 1) {\n        var val = bez.point(f[i])[comp];\n        if (val < min) min = val;else if (val > max) max = val;\n      }\n    }\n\n    return {\n      min: min,\n      max: max\n    };\n  }\n\n  PolynomialBezier.prototype.bounds = function () {\n    return {\n      x: extrema(this, 0),\n      y: extrema(this, 1)\n    };\n  };\n\n  PolynomialBezier.prototype.boundingBox = function () {\n    var bounds = this.bounds();\n    return {\n      left: bounds.x.min,\n      right: bounds.x.max,\n      top: bounds.y.min,\n      bottom: bounds.y.max,\n      width: bounds.x.max - bounds.x.min,\n      height: bounds.y.max - bounds.y.min,\n      cx: (bounds.x.max + bounds.x.min) / 2,\n      cy: (bounds.y.max + bounds.y.min) / 2\n    };\n  };\n\n  function intersectData(bez, t1, t2) {\n    var box = bez.boundingBox();\n    return {\n      cx: box.cx,\n      cy: box.cy,\n      width: box.width,\n      height: box.height,\n      bez: bez,\n      t: (t1 + t2) / 2,\n      t1: t1,\n      t2: t2\n    };\n  }\n\n  function splitData(data) {\n    var split = data.bez.split(0.5);\n    return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n  }\n\n  function boxIntersect(b1, b2) {\n    return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n  }\n\n  function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n    if (!boxIntersect(d1, d2)) return;\n\n    if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n      intersections.push([d1.t, d2.t]);\n      return;\n    }\n\n    var d1s = splitData(d1);\n    var d2s = splitData(d2);\n    intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n  }\n\n  PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n    if (tolerance === undefined) tolerance = 2;\n    if (maxRecursion === undefined) maxRecursion = 7;\n    var intersections = [];\n    intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n    return intersections;\n  };\n\n  PolynomialBezier.shapeSegment = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n  };\n\n  PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n  };\n\n  function crossProduct(a, b) {\n    return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n  }\n\n  function lineIntersection(start1, end1, start2, end2) {\n    var v1 = [start1[0], start1[1], 1];\n    var v2 = [end1[0], end1[1], 1];\n    var v3 = [start2[0], start2[1], 1];\n    var v4 = [end2[0], end2[1], 1];\n    var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n    if (floatZero(r[2])) return null;\n    return [r[0] / r[2], r[1] / r[2]];\n  }\n\n  function polarOffset(p, angle, length) {\n    return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n  }\n\n  function pointDistance(p1, p2) {\n    return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n  }\n\n  function pointEqual(p1, p2) {\n    return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n  }\n\n  function ZigZagModifier() {}\n\n  extendPrototype([ShapeModifier], ZigZagModifier);\n\n  ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n    this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n    this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n  };\n\n  function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n    var angO = angle - Math.PI / 2;\n    var angI = angle + Math.PI / 2;\n    var px = point[0] + Math.cos(angle) * direction * amplitude;\n    var py = point[1] - Math.sin(angle) * direction * amplitude;\n    outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n  }\n\n  function getPerpendicularVector(pt1, pt2) {\n    var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n    var rot = -Math.PI * 0.5;\n    var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n    return rotatedVector;\n  }\n\n  function getProjectingAngle(path, cur) {\n    var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n    var nextIndex = (cur + 1) % path.length();\n    var prevPoint = path.v[prevIndex];\n    var nextPoint = path.v[nextIndex];\n    var pVector = getPerpendicularVector(prevPoint, nextPoint);\n    return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n  }\n\n  function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n    var angle = getProjectingAngle(path, cur);\n    var point = path.v[cur % path._length];\n    var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n    var nextPoint = path.v[(cur + 1) % path._length];\n    var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n    var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n    setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n  }\n\n  function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n    for (var i = 0; i < frequency; i += 1) {\n      var t = (i + 1) / (frequency + 1);\n      var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n      var angle = segment.normalAngle(t);\n      var point = segment.point(t);\n      setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n      direction = -direction;\n    }\n\n    return direction;\n  }\n\n  ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n    var count = path._length;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n\n    if (!path.c) {\n      count -= 1;\n    }\n\n    if (count === 0) return clonedPath;\n    var direction = -1;\n    var segment = PolynomialBezier.shapeSegment(path, 0);\n    zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n    for (var i = 0; i < count; i += 1) {\n      direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n      if (i === count - 1 && !path.c) {\n        segment = null;\n      } else {\n        segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n      }\n\n      zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n    }\n\n    return clonedPath;\n  };\n\n  ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amplitude = this.amplitude.v;\n    var frequency = Math.max(0, Math.round(this.frequency.v));\n    var pointType = this.pointsType.v;\n\n    if (amplitude !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function linearOffset(p1, p2, amount) {\n    var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n    return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n  }\n\n  function offsetSegment(segment, amount) {\n    var p0;\n    var p1a;\n    var p1b;\n    var p2b;\n    var p2a;\n    var p3;\n    var e;\n    e = linearOffset(segment.points[0], segment.points[1], amount);\n    p0 = e[0];\n    p1a = e[1];\n    e = linearOffset(segment.points[1], segment.points[2], amount);\n    p1b = e[0];\n    p2b = e[1];\n    e = linearOffset(segment.points[2], segment.points[3], amount);\n    p2a = e[0];\n    p3 = e[1];\n    var p1 = lineIntersection(p0, p1a, p1b, p2b);\n    if (p1 === null) p1 = p1a;\n    var p2 = lineIntersection(p2a, p3, p1b, p2b);\n    if (p2 === null) p2 = p2a;\n    return new PolynomialBezier(p0, p1, p2, p3);\n  }\n\n  function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n    var p0 = seg1.points[3];\n    var p1 = seg2.points[0]; // Bevel\n\n    if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n    if (pointEqual(p0, p1)) return p0; // Round\n\n    if (lineJoin === 2) {\n      var angleOut = -seg1.tangentAngle(1);\n      var angleIn = -seg2.tangentAngle(0) + Math.PI;\n      var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n      var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n      var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n      outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n      tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n      outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n      return p1;\n    } // Miter\n\n\n    var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n    var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n    var intersection = lineIntersection(t0, p0, p1, t1);\n\n    if (intersection && pointDistance(intersection, p0) < miterLimit) {\n      outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n      return intersection;\n    }\n\n    return p0;\n  }\n\n  function getIntersection(a, b) {\n    var intersect = a.intersections(b);\n    if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n    if (intersect.length) return intersect[0];\n    return null;\n  }\n\n  function pruneSegmentIntersection(a, b) {\n    var outa = a.slice();\n    var outb = b.slice();\n    var intersect = getIntersection(a[a.length - 1], b[0]);\n\n    if (intersect) {\n      outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n      outb[0] = b[0].split(intersect[1])[1];\n    }\n\n    if (a.length > 1 && b.length > 1) {\n      intersect = getIntersection(a[0], b[b.length - 1]);\n\n      if (intersect) {\n        return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n      }\n    }\n\n    return [outa, outb];\n  }\n\n  function pruneIntersections(segments) {\n    var e;\n\n    for (var i = 1; i < segments.length; i += 1) {\n      e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n      segments[i - 1] = e[0];\n      segments[i] = e[1];\n    }\n\n    if (segments.length > 1) {\n      e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n      segments[segments.length - 1] = e[0];\n      segments[0] = e[1];\n    }\n\n    return segments;\n  }\n\n  function offsetSegmentSplit(segment, amount) {\n    /*\r\n      We split each bezier segment into smaller pieces based\r\n      on inflection points, this ensures the control point\r\n      polygon is convex.\r\n        (A cubic bezier can have none, one, or two inflection points)\r\n    */\n    var flex = segment.inflectionPoints();\n    var left;\n    var right;\n    var split;\n    var mid;\n\n    if (flex.length === 0) {\n      return [offsetSegment(segment, amount)];\n    }\n\n    if (flex.length === 1 || floatEqual(flex[1], 1)) {\n      split = segment.split(flex[0]);\n      left = split[0];\n      right = split[1];\n      return [offsetSegment(left, amount), offsetSegment(right, amount)];\n    }\n\n    split = segment.split(flex[0]);\n    left = split[0];\n    var t = (flex[1] - flex[0]) / (1 - flex[0]);\n    split = split[1].split(t);\n    mid = split[0];\n    right = split[1];\n    return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n  }\n\n  function OffsetPathModifier() {}\n\n  extendPrototype([ShapeModifier], OffsetPathModifier);\n\n  OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n    this.lineJoin = data.lj;\n    this._isAnimated = this.amount.effectsSequence.length !== 0;\n  };\n\n  OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n    var outputBezier = shapePool.newElement();\n    outputBezier.c = inputBezier.c;\n    var count = inputBezier.length();\n\n    if (!inputBezier.c) {\n      count -= 1;\n    }\n\n    var i;\n    var j;\n    var segment;\n    var multiSegments = [];\n\n    for (i = 0; i < count; i += 1) {\n      segment = PolynomialBezier.shapeSegment(inputBezier, i);\n      multiSegments.push(offsetSegmentSplit(segment, amount));\n    }\n\n    if (!inputBezier.c) {\n      for (i = count - 1; i >= 0; i -= 1) {\n        segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n        multiSegments.push(offsetSegmentSplit(segment, amount));\n      }\n    }\n\n    multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n    var lastPoint = null;\n    var lastSeg = null;\n\n    for (i = 0; i < multiSegments.length; i += 1) {\n      var multiSegment = multiSegments[i];\n      if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n      lastSeg = multiSegment[multiSegment.length - 1];\n\n      for (j = 0; j < multiSegment.length; j += 1) {\n        segment = multiSegment[j];\n\n        if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n          outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n        } else {\n          outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n        }\n\n        outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n        lastPoint = segment.points[3];\n      }\n    }\n\n    if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n    return outputBezier;\n  };\n\n  OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n    var miterLimit = this.miterLimit.v;\n    var lineJoin = this.lineJoin;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function getFontProperties(fontData) {\n    var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n    var fWeight = 'normal';\n    var fStyle = 'normal';\n    var len = styles.length;\n    var styleName;\n\n    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n\n        case 'bold':\n          fWeight = '700';\n          break;\n\n        case 'black':\n          fWeight = '900';\n          break;\n\n        case 'medium':\n          fWeight = '500';\n          break;\n\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight\n    };\n  }\n\n  var FontManager = function () {\n    var maxWaitingTime = 5000;\n    var emptyChar = {\n      w: 0,\n      size: 0,\n      shapes: [],\n      data: {\n        shapes: []\n      }\n    };\n    var combinedCharacters = []; // Hindi characters\n\n    combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n    var BLACK_FLAG_CODE_POINT = 127988;\n    var CANCEL_TAG_CODE_POINT = 917631;\n    var A_TAG_CODE_POINT = 917601;\n    var Z_TAG_CODE_POINT = 917626;\n    var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n    var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n    var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n    var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\n\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i]);\n        }\n      }\n\n      return enabledFamilies.join(',');\n    }\n\n    function setUpNode(font, family) {\n      var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span'); // Characters that vary significantly among different fonts\n\n      node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n      parentNode.style.fontSize = '300px'; // Reset any font properties\n\n      parentNode.style.fontVariant = 'normal';\n      parentNode.style.fontStyle = 'normal';\n      parentNode.style.fontWeight = 'normal';\n      parentNode.style.letterSpacing = '0';\n      parentNode.appendChild(node);\n      document.body.appendChild(parentNode); // Remember width with no applied web font\n\n      var width = node.offsetWidth;\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n      return {\n        node: node,\n        w: width,\n        parent: parentNode\n      };\n    }\n\n    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.fonts[i].loaded) {\n          loadedCount -= 1;\n        } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n          this.fonts[i].loaded = true;\n        } else {\n          node = this.fonts[i].monoCase.node;\n          w = this.fonts[i].monoCase.w;\n\n          if (node.offsetWidth !== w) {\n            loadedCount -= 1;\n            this.fonts[i].loaded = true;\n          } else {\n            node = this.fonts[i].sansCase.node;\n            w = this.fonts[i].sansCase.w;\n\n            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\n            }\n          }\n\n          if (this.fonts[i].loaded) {\n            this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n            this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n          }\n        }\n      }\n\n      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n        tHelper.setAttribute('font-family', fontData.fFamily);\n        tHelper.setAttribute('font-style', fontProps.style);\n        tHelper.setAttribute('font-weight', fontProps.weight);\n        tHelper.textContent = '1';\n\n        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\n        }\n\n        def.appendChild(tHelper);\n        helper = tHelper;\n      } else {\n        var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n        tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n        helper = tCanvasHelper;\n      }\n\n      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n\n        return helper.measureText(text).width;\n      }\n\n      return {\n        measureText: measure\n      };\n    }\n\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\n      }\n\n      if (!document.body) {\n        this.isLoaded = true;\n        fontData.list.forEach(function (data) {\n          data.helper = createHelper(data);\n          data.cache = {};\n        });\n        this.fonts = fontData.list;\n        return;\n      }\n\n      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\n\n      for (i = 0; i < len; i += 1) {\n        var shouldLoadFont = true;\n        var loadedSelector;\n        var j;\n        fontArr[i].loaded = false;\n        fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n        fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n        if (!fontArr[i].fPath) {\n          fontArr[i].loaded = true;\n          _pendingFonts -= 1;\n        } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n          loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\n          }\n\n          if (shouldLoadFont) {\n            var s = createTag('style');\n            s.setAttribute('f-forigin', fontArr[i].fOrigin);\n            s.setAttribute('f-origin', fontArr[i].origin);\n            s.setAttribute('f-family', fontArr[i].fFamily);\n            s.type = 'text/css';\n            s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n            defs.appendChild(s);\n          }\n        } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n          loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var l = createTag('link');\n            l.setAttribute('f-forigin', fontArr[i].fOrigin);\n            l.setAttribute('f-origin', fontArr[i].origin);\n            l.type = 'text/css';\n            l.rel = 'stylesheet';\n            l.href = fontArr[i].fPath;\n            document.body.appendChild(l);\n          }\n        } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n          loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (fontArr[i].fPath === loadedSelector[j].src) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var sc = createTag('link');\n            sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n            sc.setAttribute('f-origin', fontArr[i].origin);\n            sc.setAttribute('rel', 'stylesheet');\n            sc.setAttribute('href', fontArr[i].fPath);\n            defs.appendChild(sc);\n          }\n        }\n\n        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\n      }\n\n      if (_pendingFonts === 0) {\n        this.isLoaded = true;\n      } else {\n        // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n        // Adding this timeout seems to fix it\n        setTimeout(this.checkLoadedFonts.bind(this), 100);\n      }\n    }\n\n    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n\n      if (!this.chars) {\n        this.chars = [];\n      }\n\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\n\n        while (j < jLen) {\n          if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n            found = true;\n          }\n\n          j += 1;\n        }\n\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\n\n      while (i < len) {\n        if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n          return this.chars[i];\n        }\n\n        i += 1;\n      }\n\n      if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n      && !this._warned) {\n        this._warned = true;\n        console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n      }\n\n      return emptyChar;\n    }\n\n    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n      // to avoid collisions between equal chars\n\n      var index = _char2;\n\n      if (!fontData.cache[index]) {\n        var tHelper = fontData.helper;\n\n        if (_char2 === ' ') {\n          var doubleSize = tHelper.measureText('|' + _char2 + '|');\n          var singleSize = tHelper.measureText('||');\n          fontData.cache[index] = (doubleSize - singleSize) / 100;\n        } else {\n          fontData.cache[index] = tHelper.measureText(_char2) / 100;\n        }\n      }\n\n      return fontData.cache[index] * size;\n    }\n\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n\n        i += 1;\n      }\n\n      return this.fonts[0];\n    }\n\n    function getCodePoint(string) {\n      var codePoint = 0;\n      var first = string.charCodeAt(0);\n\n      if (first >= 0xD800 && first <= 0xDBFF) {\n        var second = string.charCodeAt(1);\n\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n          codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n      }\n\n      return codePoint;\n    } // Skin tone modifiers\n\n\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n\n    function isZeroWidthJoiner(charCode) {\n      return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n    } // This codepoint may change the appearance of the preceding character.\n    // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n    // as a colorful image as compared to a monochrome text variant.\n\n\n    function isVariationSelector(charCode) {\n      return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n    } // The regional indicator symbols are a set of 26 alphabetic Unicode\n    /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n    // two-letter country codes in a way that allows optional special treatment.\n\n\n    function isRegionalCode(string) {\n      var codePoint = getCodePoint(string);\n\n      if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n        return true;\n      }\n\n      return false;\n    } // Some Emoji implementations represent combinations of\n    // two “regional indicator” letters as a single flag symbol.\n\n\n    function isFlagEmoji(string) {\n      return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n    }\n\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    } // Regional flags start with a BLACK_FLAG_CODE_POINT\n    // folowed by 5 chars in the TAG range\n    // and end with a CANCEL_TAG_CODE_POINT\n\n\n    function isRegionalFlag(text, index) {\n      var codePoint = getCodePoint(text.substr(index, 2));\n\n      if (codePoint !== BLACK_FLAG_CODE_POINT) {\n        return false;\n      }\n\n      var count = 0;\n      index += 2;\n\n      while (count < 5) {\n        codePoint = getCodePoint(text.substr(index, 2));\n\n        if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n          return false;\n        }\n\n        count += 1;\n        index += 2;\n      }\n\n      return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n    }\n\n    function setIsLoaded() {\n      this.isLoaded = true;\n    }\n\n    var Font = function Font() {\n      this.fonts = [];\n      this.chars = null;\n      this.typekitLoaded = 0;\n      this.isLoaded = false;\n      this._warned = false;\n      this.initTime = Date.now();\n      this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n      this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n    };\n\n    Font.isModifier = isModifier;\n    Font.isZeroWidthJoiner = isZeroWidthJoiner;\n    Font.isFlagEmoji = isFlagEmoji;\n    Font.isRegionalCode = isRegionalCode;\n    Font.isCombinedCharacter = isCombinedCharacter;\n    Font.isRegionalFlag = isRegionalFlag;\n    Font.isVariationSelector = isVariationSelector;\n    Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n    var fontPrototype = {\n      addChars: addChars,\n      addFonts: addFonts,\n      getCharData: getCharData,\n      getFontByName: getFontByName,\n      measureText: measureText,\n      checkLoadedFonts: checkLoadedFonts,\n      setIsLoaded: setIsLoaded\n    };\n    Font.prototype = fontPrototype;\n    return Font;\n  }();\n\n  function SlotManager(animationData) {\n    this.animationData = animationData;\n  }\n\n  SlotManager.prototype.getProp = function (data) {\n    if (this.animationData.slots && this.animationData.slots[data.sid]) {\n      return Object.assign(data, this.animationData.slots[data.sid].p);\n    }\n\n    return data;\n  };\n\n  function slotFactory(animationData) {\n    return new SlotManager(animationData);\n  }\n\n  function RenderableElement() {}\n\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false; // layer's display state\n\n      this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n      this.isTransparent = false; // list of animated components\n\n      this.renderableComponents = [];\n    },\n    addRenderableComponent: function addRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component);\n      }\n    },\n    removeRenderableComponent: function removeRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n      }\n    },\n    prepareRenderableFrame: function prepareRenderableFrame(num) {\n      this.checkLayerLimits(num);\n    },\n    checkTransparency: function checkTransparency() {\n      if (this.finalTransform.mProp.o.v <= 0) {\n        if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n          this.isTransparent = true;\n          this.hide();\n        }\n      } else if (this.isTransparent) {\n        this.isTransparent = false;\n        this.show();\n      }\n    },\n\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       *\r\n       */\n    checkLayerLimits: function checkLayerLimits(num) {\n      if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n        if (this.isInRange !== true) {\n          this.globalData._mdf = true;\n          this._mdf = true;\n          this.isInRange = true;\n          this.show();\n        }\n      } else if (this.isInRange !== false) {\n        this.globalData._mdf = true;\n        this.isInRange = false;\n        this.hide();\n      }\n    },\n    renderRenderable: function renderRenderable() {\n      var i;\n      var len = this.renderableComponents.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n          this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n    },\n    sourceRectAtTime: function sourceRectAtTime() {\n      return {\n        top: 0,\n        left: 0,\n        width: 100,\n        height: 100\n      };\n    },\n    getLayerSize: function getLayerSize() {\n      if (this.data.ty === 5) {\n        return {\n          w: this.data.textData.width,\n          h: this.data.textData.height\n        };\n      }\n\n      return {\n        w: this.data.width,\n        h: this.data.height\n      };\n    }\n  };\n\n  var getBlendMode = function () {\n    var blendModeEnums = {\n      0: 'source-over',\n      1: 'multiply',\n      2: 'screen',\n      3: 'overlay',\n      4: 'darken',\n      5: 'lighten',\n      6: 'color-dodge',\n      7: 'color-burn',\n      8: 'hard-light',\n      9: 'soft-light',\n      10: 'difference',\n      11: 'exclusion',\n      12: 'hue',\n      13: 'saturation',\n      14: 'color',\n      15: 'luminosity'\n    };\n    return function (mode) {\n      return blendModeEnums[mode] || '';\n    };\n  }();\n\n  function SliderEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function NoValueEffect() {\n    this.p = {};\n  }\n\n  function EffectsManager(data, element) {\n    var effects = data.ef || [];\n    this.effectElements = [];\n    var i;\n    var len = effects.length;\n    var effectItem;\n\n    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n  GroupEffect.prototype.init = function (data, element) {\n    this.data = data;\n    this.effectElements = [];\n    this.initDynamicPropertyContainer(element);\n    var i;\n    var len = this.data.ef.length;\n    var eff;\n    var effects = this.data.ef;\n\n    for (i = 0; i < len; i += 1) {\n      eff = null;\n\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n\n      var i = 0;\n      var len = this.data.masksProperties.length;\n\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n\n        i += 1;\n      }\n\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      var expressionsInterfaces = getExpressionInterfaces();\n\n      if (!expressionsInterfaces) {\n        return;\n      }\n\n      var LayerExpressionInterface = expressionsInterfaces('layer');\n      var EffectsExpressionInterface = expressionsInterfaces('effects');\n      var ShapeExpressionInterface = expressionsInterfaces('shape');\n      var TextExpressionInterface = expressionsInterfaces('text');\n      var CompExpressionInterface = expressionsInterfaces('comp');\n      this.layerInterface = LayerExpressionInterface(this);\n\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\n\n      if (this.data.ty === 0 || this.data.xt) {\n        this.compInterface = CompExpressionInterface(this);\n      } else if (this.data.ty === 4) {\n        this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n        this.layerInterface.content = this.layerInterface.shapeInterface;\n      } else if (this.data.ty === 5) {\n        this.layerInterface.textInterface = TextExpressionInterface(this);\n        this.layerInterface.text = this.layerInterface.textInterface;\n      }\n    },\n    setBlendMode: function setBlendMode() {\n      var blendModeValue = getBlendMode(this.data.bm);\n      var elem = this.baseElement || this.layerElement;\n      elem.style['mix-blend-mode'] = blendModeValue;\n    },\n    initBaseData: function initBaseData(data, globalData, comp) {\n      this.globalData = globalData;\n      this.comp = comp;\n      this.data = data;\n      this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      } // effects manager\n\n\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n    },\n    getType: function getType() {\n      return this.type;\n    },\n    sourceRectAtTime: function sourceRectAtTime() {}\n  };\n\n  /**\r\n   * @file\r\n   * Handles element's layer frame update.\r\n   * Checks layer in point and out point\r\n   *\r\n   */\n  function FrameElement() {}\n\n  FrameElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false; // list of animated properties\n\n      this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n      this._mdf = false;\n    },\n\n    /**\r\n       * @function\r\n       * Calculates all dynamic values\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       * @param {boolean} isVisible\r\n       * if layers is currently in range\r\n       *\r\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\n\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true;\n            this._mdf = true;\n          }\n        }\n      }\n    },\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n      }\n    }\n  };\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.footageData = globalData.imageLoader.getAsset(this.assetData);\n    this.initBaseData(data, globalData, comp);\n  }\n\n  FootageElement.prototype.prepareFrame = function () {};\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  FootageElement.prototype.renderFrame = function () {};\n\n  FootageElement.prototype.destroy = function () {};\n\n  FootageElement.prototype.initExpressions = function () {\n    var expressionsInterfaces = getExpressionInterfaces();\n\n    if (!expressionsInterfaces) {\n      return;\n    }\n\n    var FootageInterface = expressionsInterfaces('footage');\n    this.layerInterface = FootageInterface(this);\n  };\n\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData;\n  };\n\n  function AudioElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initBaseData(data, globalData, comp);\n    this._isPlaying = false;\n    this._canPlay = false;\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.audio = this.globalData.audioController.createAudio(assetPath);\n    this._currentTime = 0;\n    this.globalData.audioController.addAudio(this);\n    this._volumeMultiplier = 1;\n    this._volume = 1;\n    this._previousVolume = null;\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n      k: [100]\n    }, 1, 0.01, this);\n  }\n\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      this._currentTime = timeRemapped;\n    } else {\n      this._currentTime = num / this.data.sr;\n    }\n\n    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n  AudioElement.prototype.renderFrame = function () {\n    if (this.isInRange && this._canPlay) {\n      if (!this._isPlaying) {\n        this.audio.play();\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n        this._isPlaying = true;\n      } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n      }\n    }\n  };\n\n  AudioElement.prototype.show = function () {// this.audio.play()\n  };\n\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\n  };\n\n  AudioElement.prototype.volume = function (volumeValue) {\n    this._volumeMultiplier = volumeValue;\n    this._previousVolume = volumeValue * this._volume;\n    this.audio.volume(this._previousVolume);\n  };\n\n  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  AudioElement.prototype.destroy = function () {};\n\n  AudioElement.prototype.sourceRectAtTime = function () {};\n\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\n\n        if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n          this.buildItem(i);\n        }\n      }\n\n      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n\n      case 0:\n        return this.createComp(layer);\n\n      case 1:\n        return this.createSolid(layer);\n\n      case 3:\n        return this.createNull(layer);\n\n      case 4:\n        return this.createShape(layer);\n\n      case 5:\n        return this.createText(layer);\n\n      case 6:\n        return this.createAudio(layer);\n\n      case 13:\n        return this.createCamera(layer);\n\n      case 15:\n        return this.createFootage(layer);\n\n      default:\n        return this.createNull(layer);\n    }\n  };\n\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.includeLayers = function (newLayers) {\n    this.completeLayers = false;\n    var i;\n    var len = newLayers.length;\n    var j;\n    var jLen = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      j = 0;\n\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n\n        j += 1;\n      }\n    }\n  };\n\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n  };\n\n  BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n    var elements = this.elements;\n    var layers = this.layers;\n    var i = 0;\n    var len = layers.length;\n\n    while (i < len) {\n      if (layers[i].ind == parentName) {\n        // eslint-disable-line eqeqeq\n        if (!elements[i] || elements[i] === true) {\n          this.buildItem(i);\n          this.addPendingElement(element);\n        } else {\n          hierarchy.push(elements[i]);\n          elements[i].setAsParent();\n\n          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n\n      i += 1;\n    }\n  };\n\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i]);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  BaseRenderer.prototype.getElementById = function (ind) {\n    var i;\n    var len = this.elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i].data.ind === ind) {\n        return this.elements[i];\n      }\n    }\n\n    return null;\n  };\n\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.elements[i].data.nm === pathValue) {\n          element = this.elements[i];\n          break;\n        }\n      }\n    }\n\n    if (path.length === 0) {\n      return element;\n    }\n\n    return element.getElementByPath(path);\n  };\n\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager();\n    this.globalData.slotManager = slotFactory(animData);\n    this.globalData.fontManager.addChars(animData.chars);\n    this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n    this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n    this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n    this.globalData.imageLoader = this.animationItem.imagePreloader;\n    this.globalData.audioController = this.animationItem.audioController;\n    this.globalData.frameId = 0;\n    this.globalData.frameRate = animData.fr;\n    this.globalData.nm = animData.nm;\n    this.globalData.compSize = {\n      w: animData.w,\n      h: animData.h\n    };\n  };\n\n  var effectTypes = {\n    TRANSFORM_EFFECT: 'transformEFfect'\n  };\n\n  function TransformElement() {}\n\n  TransformElement.prototype = {\n    initTransform: function initTransform() {\n      var mat = new Matrix();\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n          o: 0\n        },\n        _matMdf: false,\n        _localMatMdf: false,\n        _opMdf: false,\n        mat: mat,\n        localMat: mat,\n        localOpacity: 1\n      };\n\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      } // TODO: check TYPE 11: Guided elements\n\n\n      if (this.data.ty !== 11) {// this.createElements();\n      }\n    },\n    renderTransform: function renderTransform() {\n      this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n      this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n        if (!this.finalTransform._matMdf) {\n          while (i < len) {\n            if (this.hierarchy[i].finalTransform.mProp._mdf) {\n              this.finalTransform._matMdf = true;\n              break;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n\n          for (i = 0; i < len; i += 1) {\n            finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n          }\n        }\n      }\n\n      if (this.finalTransform._matMdf) {\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderLocalTransform: function renderLocalTransform() {\n      if (this.localTransforms) {\n        var i = 0;\n        var len = this.localTransforms.length;\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n        if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n          while (i < len) {\n            if (this.localTransforms[i]._mdf) {\n              this.finalTransform._localMatMdf = true;\n            }\n\n            if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n              this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n              this.finalTransform._opMdf = true;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._localMatMdf) {\n          var localMat = this.finalTransform.localMat;\n          this.localTransforms[0].matrix.clone(localMat);\n\n          for (i = 1; i < len; i += 1) {\n            var lmat = this.localTransforms[i].matrix;\n            localMat.multiply(lmat);\n          }\n\n          localMat.multiply(this.finalTransform.mat);\n        }\n\n        if (this.finalTransform._opMdf) {\n          var localOp = this.finalTransform.localOpacity;\n\n          for (i = 0; i < len; i += 1) {\n            localOp *= this.localTransforms[i].opacity * 0.01;\n          }\n\n          this.finalTransform.localOpacity = localOp;\n        }\n      }\n    },\n    searchEffectTransforms: function searchEffectTransforms() {\n      if (this.renderableEffectsManager) {\n        var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n        if (transformEffects.length) {\n          this.localTransforms = [];\n          this.finalTransform.localMat = new Matrix();\n          var i = 0;\n          var len = transformEffects.length;\n\n          for (i = 0; i < len; i += 1) {\n            this.localTransforms.push(transformEffects[i]);\n          }\n        }\n      }\n    },\n    globalToLocal: function globalToLocal(pt) {\n      var transforms = [];\n      transforms.push(this.finalTransform);\n      var flag = true;\n      var comp = this.comp;\n\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n\n      var i;\n      var len = transforms.length;\n      var ptNew;\n\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n      }\n\n      return pt;\n    },\n    mHelper: new Matrix()\n  };\n\n  function MaskElement(data, element, globalData) {\n    this.data = data;\n    this.element = element;\n    this.globalData = globalData;\n    this.storedData = [];\n    this.masksProperties = this.data.masksProperties || [];\n    this.maskElement = null;\n    var defs = this.globalData.defs;\n    var i;\n    var len = this.masksProperties ? this.masksProperties.length : 0;\n    this.viewData = createSizedArray(len);\n    this.solidPath = '';\n    var path;\n    var properties = this.masksProperties;\n    var count = 0;\n    var currentMasks = [];\n    var j;\n    var jLen;\n    var layerId = createElementID();\n    var rect;\n    var expansor;\n    var feMorph;\n    var x;\n    var maskType = 'clipPath';\n    var maskRef = 'clip-path';\n\n    for (i = 0; i < len; i += 1) {\n      if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n        maskType = 'mask';\n        maskRef = 'mask';\n      }\n\n      if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n        rect = createNS('rect');\n        rect.setAttribute('fill', '#ffffff');\n        rect.setAttribute('width', this.element.comp.data.w || 0);\n        rect.setAttribute('height', this.element.comp.data.h || 0);\n        currentMasks.push(rect);\n      } else {\n        rect = null;\n      }\n\n      path = createNS('path');\n\n      if (properties[i].mode === 'n') {\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          elem: path,\n          lastPath: ''\n        };\n        defs.appendChild(path);\n      } else {\n        count += 1;\n        path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        path.setAttribute('clip-rule', 'nonzero');\n        var filterID;\n\n        if (properties[i].x.k !== 0) {\n          maskType = 'mask';\n          maskRef = 'mask';\n          x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n          filterID = createElementID();\n          expansor = createNS('filter');\n          expansor.setAttribute('id', filterID);\n          feMorph = createNS('feMorphology');\n          feMorph.setAttribute('operator', 'erode');\n          feMorph.setAttribute('in', 'SourceGraphic');\n          feMorph.setAttribute('radius', '0');\n          expansor.appendChild(feMorph);\n          defs.appendChild(expansor);\n          path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        } else {\n          feMorph = null;\n          x = null;\n        } // TODO move this to a factory or to a constructor\n\n\n        this.storedData[i] = {\n          elem: path,\n          x: x,\n          expan: feMorph,\n          lastPath: '',\n          lastOperator: '',\n          filterId: filterID,\n          lastRadius: 0\n        };\n\n        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\n          }\n\n          var mask = createNS('mask');\n          mask.setAttribute('mask-type', 'alpha');\n          mask.setAttribute('id', layerId + '_' + count);\n          mask.appendChild(path);\n          defs.appendChild(mask);\n          g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n          currentMasks.length = 0;\n          currentMasks.push(g);\n        } else {\n          currentMasks.push(path);\n        }\n\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        } // TODO move this to a factory or to a constructor\n\n\n        this.viewData[i] = {\n          elem: path,\n          lastPath: '',\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          invRect: rect\n        };\n\n        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\n    }\n\n    if (count > 0) {\n      this.maskElement.setAttribute('id', layerId);\n      this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n      defs.appendChild(this.maskElement);\n    }\n\n    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.viewData[i].prop._mdf || isFirstFrame) {\n        this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n      }\n\n      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n      }\n\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n          this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n        }\n\n        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\n\n          if (this.storedData[i].x.v < 0) {\n            if (this.storedData[i].lastOperator !== 'erode') {\n              this.storedData[i].lastOperator = 'erode';\n              this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n            }\n\n            feMorph.setAttribute('radius', -this.storedData[i].x.v);\n          } else {\n            if (this.storedData[i].lastOperator !== 'dilate') {\n              this.storedData[i].lastOperator = 'dilate';\n              this.storedData[i].elem.setAttribute('filter', null);\n            }\n\n            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\n  };\n\n  MaskElement.prototype.createLayerSolidPath = function () {\n    var path = 'M0,0 ';\n    path += ' h' + this.globalData.compSize.w;\n    path += ' v' + this.globalData.compSize.h;\n    path += ' h-' + this.globalData.compSize.w;\n    path += ' v-' + this.globalData.compSize.h + ' ';\n    return path;\n  };\n\n  MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n    var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    var i;\n    var len;\n    len = pathNodes._length;\n\n    for (i = 1; i < len; i += 1) {\n      // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n    } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n    if (pathNodes.c && len > 1) {\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    } // pathNodes.__renderedString = pathString;\n\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n\n      viewData.lastPath = pathString;\n    }\n  };\n\n  MaskElement.prototype.destroy = function () {\n    this.element = null;\n    this.globalData = null;\n    this.maskElement = null;\n    this.data = null;\n    this.masksProperties = null;\n  };\n\n  var filtersFactory = function () {\n    var ob = {};\n    ob.createFilter = createFilter;\n    ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\n\n      if (skipCoordinates !== true) {\n        fil.setAttribute('filterUnits', 'objectBoundingBox');\n        fil.setAttribute('x', '0%');\n        fil.setAttribute('y', '0%');\n        fil.setAttribute('width', '100%');\n        fil.setAttribute('height', '100%');\n      }\n\n      return fil;\n    }\n\n    function createAlphaToLuminanceFilter() {\n      var feColorMatrix = createNS('feColorMatrix');\n      feColorMatrix.setAttribute('type', 'matrix');\n      feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n      feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\n      return feColorMatrix;\n    }\n\n    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true,\n      svgLumaHidden: true,\n      offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\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    if (/firefox/i.test(navigator.userAgent)) {\n      ob.svgLumaHidden = false;\n    }\n\n    return ob;\n  }();\n\n  var registeredEffects$1 = {};\n  var idPrefix = 'filter_result_';\n\n  function SVGEffects(elem) {\n    var i;\n    var source = 'SourceGraphic';\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    var filId = createElementID();\n    var fil = filtersFactory.createFilter(filId, true);\n    var count = 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects$1[type]) {\n        var Effect = registeredEffects$1[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n\n        if (registeredEffects$1[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  SVGEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect$1(id, effect, countsAsEffect) {\n    registeredEffects$1[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\n\n  SVGBaseElement.prototype = {\n    initRendererElement: function initRendererElement() {\n      this.layerElement = createNS('g');\n    },\n    createContainerElements: function createContainerElements() {\n      this.matteElement = createNS('g');\n      this.transformedElement = this.layerElement;\n      this.maskedElement = this.layerElement;\n      this._sizeChanged = false;\n      var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n      if (this.data.td) {\n        this.matteMasks = {};\n        var gg = createNS('g');\n        gg.setAttribute('id', this.layerId);\n        gg.appendChild(this.layerElement);\n        layerElementParent = gg;\n        this.globalData.defs.appendChild(gg);\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement);\n        layerElementParent = this.matteElement;\n        this.baseElement = this.matteElement;\n      } else {\n        this.baseElement = this.layerElement;\n      }\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath');\n        var pt = createNS('path');\n        pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n        var clipId = createElementID();\n        cp.setAttribute('id', clipId);\n        cp.appendChild(pt);\n        this.globalData.defs.appendChild(cp);\n\n        if (this.checkMasks()) {\n          var cpGroup = createNS('g');\n          cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n          cpGroup.appendChild(this.layerElement);\n          this.transformedElement = cpGroup;\n\n          if (layerElementParent) {\n            layerElementParent.appendChild(this.transformedElement);\n          } else {\n            this.baseElement = this.transformedElement;\n          }\n        } else {\n          this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n        }\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      if (this.finalTransform._localMatMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\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      this.searchEffectTransforms();\n    },\n    getMatte: function getMatte(matteType) {\n      // This should not be a common case. But for backward compatibility, we'll create the matte object.\n      // It solves animations that have two consecutive layers marked as matte masks.\n      // Which is an undefined behavior in AE.\n      if (!this.matteMasks) {\n        this.matteMasks = {};\n      }\n\n      if (!this.matteMasks[matteType]) {\n        var id = this.layerId + '_' + matteType;\n        var filId;\n        var fil;\n        var useElement;\n        var gg;\n\n        if (matteType === 1 || matteType === 3) {\n          var masker = createNS('mask');\n          masker.setAttribute('id', id);\n          masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          masker.appendChild(useElement);\n          this.globalData.defs.appendChild(masker);\n\n          if (!featureSupport.maskType && matteType === 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(useElement);\n            masker.appendChild(gg);\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          }\n        } else if (matteType === 2) {\n          var maskGroup = createNS('mask');\n          maskGroup.setAttribute('id', id);\n          maskGroup.setAttribute('mask-type', 'alpha');\n          var maskGrouper = createNS('g');\n          maskGroup.appendChild(maskGrouper);\n          filId = createElementID();\n          fil = filtersFactory.createFilter(filId); /// /\n\n          var feCTr = createNS('feComponentTransfer');\n          feCTr.setAttribute('in', 'SourceGraphic');\n          fil.appendChild(feCTr);\n          var feFunc = createNS('feFuncA');\n          feFunc.setAttribute('type', 'table');\n          feFunc.setAttribute('tableValues', '1.0 0.0');\n          feCTr.appendChild(feFunc); /// /\n\n          this.globalData.defs.appendChild(fil);\n          var alphaRect = createNS('rect');\n          alphaRect.setAttribute('width', this.comp.data.w);\n          alphaRect.setAttribute('height', this.comp.data.h);\n          alphaRect.setAttribute('x', '0');\n          alphaRect.setAttribute('y', '0');\n          alphaRect.setAttribute('fill', '#ffffff');\n          alphaRect.setAttribute('opacity', '0');\n          maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          maskGrouper.appendChild(alphaRect);\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          maskGrouper.appendChild(useElement);\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            maskGrouper.appendChild(gg);\n          }\n\n          this.globalData.defs.appendChild(maskGroup);\n        }\n\n        this.matteMasks[matteType] = id;\n      }\n\n      return this.matteMasks[matteType];\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\r\n   * @file\r\n   * Handles AE's layer parenting property.\r\n   *\r\n   */\n  function HierarchyElement() {}\n\n  HierarchyElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes hierarchy properties\r\n       *\r\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n      this._isParent = false;\n      this.checkParenting();\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer's hierarchy.\r\n       * @param {array} hierarch\r\n       * layer's parent list\r\n       *\r\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer as parent.\r\n       *\r\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n\n    /**\r\n       * @function\r\n       * Searches layer's parenting chain\r\n       *\r\n       */\n    checkParenting: function checkParenting() {\n      if (this.data.parent !== undefined) {\n        this.comp.buildElementParenting(this, this.data.parent, []);\n      }\n    }\n  };\n\n  function RenderableDOMElement() {}\n\n  (function () {\n    var _prototype = {\n      initElement: function initElement(data, globalData, comp) {\n        this.initFrame();\n        this.initBaseData(data, globalData, comp);\n        this.initTransform(data, globalData, comp);\n        this.initHierarchy();\n        this.initRenderable();\n        this.initRendererElement();\n        this.createContainerElements();\n        this.createRenderableComponents();\n        this.createContent();\n        this.hide();\n      },\n      hide: function hide() {\n        // console.log('HIDE', this);\n        if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n          var elem = this.baseElement || this.layerElement;\n          elem.style.display = 'none';\n          this.hidden = true;\n        }\n      },\n      show: function show() {\n        // console.log('SHOW', this);\n        if (this.isInRange && !this.isTransparent) {\n          if (!this.data.hd) {\n            var elem = this.baseElement || this.layerElement;\n            elem.style.display = 'block';\n          }\n\n          this.hidden = false;\n          this._isFirstFrame = true;\n        }\n      },\n      renderFrame: function renderFrame() {\n        // If it is exported as hidden (data.hd === true) no need to render\n        // If it is not visible no need to render\n        if (this.data.hd || this.hidden) {\n          return;\n        }\n\n        this.renderTransform();\n        this.renderRenderable();\n        this.renderLocalTransform();\n        this.renderElement();\n        this.renderInnerContent();\n\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false;\n        }\n      },\n      renderInnerContent: function renderInnerContent() {},\n      prepareFrame: function prepareFrame(num) {\n        this._mdf = false;\n        this.prepareRenderableFrame(num);\n        this.prepareProperties(num, this.isInRange);\n        this.checkTransparency();\n      },\n      destroy: function destroy() {\n        this.innerElem = null;\n        this.destroyBaseElement();\n      }\n    };\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n  })();\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n\n    if (this.assetData && this.assetData.sid) {\n      this.assetData = globalData.slotManager.getProp(this.assetData);\n    }\n\n    this.initElement(data, globalData, comp);\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.innerElem = createNS('image');\n    this.innerElem.setAttribute('width', this.assetData.w + 'px');\n    this.innerElem.setAttribute('height', this.assetData.h + 'px');\n    this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n    this.layerElement.appendChild(this.innerElem);\n  };\n\n  IImageElement.prototype.sourceRectAtTime = function () {\n    return this.sourceRect;\n  };\n\n  function ProcessedElement(element, position) {\n    this.elem = element;\n    this.pos = position;\n  }\n\n  function IShapeElement() {}\n\n  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data);\n      }\n    },\n    isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n      var i = 0;\n      var len = this.shapeModifiers.length;\n\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n\n      var i;\n      var len = this.shapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n        // TODO: find a better solution for this\n\n        if (shouldBreakProcess) {\n          break;\n        }\n      }\n    },\n    searchProcessedElement: function searchProcessedElement(elem) {\n      var elements = this.processedElements;\n      var i = 0;\n      var len = elements.length;\n\n      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n\n        i += 1;\n      }\n\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n\n      while (i) {\n        i -= 1;\n\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\n        }\n      }\n\n      elements.push(new ProcessedElement(elem, pos));\n    },\n    prepareFrame: function prepareFrame(num) {\n      this.prepareRenderableFrame(num);\n      this.prepareProperties(num, this.isInRange);\n    }\n  };\n\n  var lineCapEnum = {\n    1: 'butt',\n    2: 'round',\n    3: 'square'\n  };\n  var lineJoinEnum = {\n    1: 'miter',\n    2: 'round',\n    3: 'bevel'\n  };\n\n  function SVGShapeData(transformers, level, shape) {\n    this.caches = [];\n    this.styles = [];\n    this.transformers = transformers;\n    this.lStr = '';\n    this.sh = shape;\n    this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n    // For now, since shapes add up with other shapes. They have to be calculated every time.\n    // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n    this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n    var i = 0;\n    var len = transformers.length;\n\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n\n      i += 1;\n    }\n  }\n\n  SVGShapeData.prototype.setAsAnimated = function () {\n    this._isAnimated = true;\n  };\n\n  function SVGStyleData(data, level) {\n    this.data = data;\n    this.type = data.ty;\n    this.d = '';\n    this.lvl = level;\n    this._mdf = false;\n    this.closed = data.hd === true;\n    this.pElem = createNS('path');\n    this.msElem = null;\n  }\n\n  SVGStyleData.prototype.reset = function () {\n    this.d = '';\n    this._mdf = false;\n  };\n\n  function DashProperty(elem, data, renderer, container) {\n    this.elem = elem;\n    this.frameId = -1;\n    this.dataProps = createSizedArray(data.length);\n    this.renderer = renderer;\n    this.k = false;\n    this.dashStr = '';\n    this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n    this.dashoffset = createTypedArray('float32', 1);\n    this.initDynamicPropertyContainer(container);\n    var i;\n    var len = data.length || 0;\n    var prop;\n\n    for (i = 0; i < len; i += 1) {\n      prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n      this.k = prop.k || this.k;\n      this.dataProps[i] = {\n        n: data[i].n,\n        p: prop\n      };\n    }\n\n    if (!this.k) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = this.k;\n  }\n\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\n      }\n\n      for (i = 0; i < len; i += 1) {\n        if (this.dataProps[i].n !== 'o') {\n          if (this.renderer === 'svg') {\n            this.dashStr += ' ' + this.dataProps[i].p.v;\n          } else {\n            this.dashArray[i] = this.dataProps[i].p.v;\n          }\n        } else {\n          this.dashoffset[0] = this.dataProps[i].p.v;\n        }\n      }\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], DashProperty);\n\n  function SVGStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n  function SVGFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n  function SVGNoStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n  function GradientProperty(elem, data, container) {\n    this.data = data;\n    this.c = createTypedArray('uint8c', data.p * 4);\n    var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n    this.o = createTypedArray('float32', cLength);\n    this._cmdf = false;\n    this._omdf = false;\n    this._collapsable = this.checkCollapsable();\n    this._hasOpacity = cLength;\n    this.initDynamicPropertyContainer(container);\n    this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n    this.k = this.prop.k;\n    this.getValue(true);\n  }\n\n  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n      if (diff > 0.01) {\n        return false;\n      }\n\n      i += 1;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\n\n      for (i = 0; i < len; i += 1) {\n        mult = i % 4 === 0 ? 100 : 255;\n        val = Math.round(this.prop.v[i] * mult);\n\n        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n\n      if (this.o.length) {\n        len = this.prop.v.length;\n\n        for (i = this.data.p * 4; i < len; i += 1) {\n          mult = i % 2 === 0 ? 100 : 1;\n          val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n          if (this.o[i - this.data.p * 4] !== val) {\n            this.o[i - this.data.p * 4] = val;\n            this._omdf = !forceRender;\n          }\n        }\n      }\n\n      this._mdf = !forceRender;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n  function SVGGradientFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.initGradientData(elem, data, styleOb);\n  }\n\n  SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n    this.h = PropertyFactory.getProp(elem, data.h || {\n      k: 0\n    }, 0, 0.01, this);\n    this.a = PropertyFactory.getProp(elem, data.a || {\n      k: 0\n    }, 0, degToRads, this);\n    this.g = new GradientProperty(elem, data.g, this);\n    this.style = styleOb;\n    this.stops = [];\n    this.setGradientData(styleOb.pElem, data);\n    this.setGradientOpacity(data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n    var gradientId = createElementID();\n    var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n    gfill.setAttribute('id', gradientId);\n    gfill.setAttribute('spreadMethod', 'pad');\n    gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n    var stops = [];\n    var stop;\n    var j;\n    var jLen;\n    jLen = data.g.p * 4;\n\n    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n    if (this.g._hasOpacity && !this.g._collapsable) {\n      var stop;\n      var j;\n      var jLen;\n      var mask = createNS('mask');\n      var maskElement = createNS('path');\n      mask.appendChild(maskElement);\n      var opacityId = createElementID();\n      var maskId = createElementID();\n      mask.setAttribute('id', maskId);\n      var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n      opFill.setAttribute('id', opacityId);\n      opFill.setAttribute('spreadMethod', 'pad');\n      opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n      jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n      var stops = this.stops;\n\n      for (j = data.g.p * 4; j < jLen; j += 2) {\n        stop = createNS('stop');\n        stop.setAttribute('stop-color', 'rgb(255,255,255)');\n        opFill.appendChild(stop);\n        stops.push(stop);\n      }\n\n      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\n        }\n      }\n\n      this.of = opFill;\n      this.ms = mask;\n      this.ost = stops;\n      this.maskId = maskId;\n      styleOb.msElem = maskElement;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n  function SVGGradientStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.initGradientData(elem, data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n  function ShapeGroupData() {\n    this.it = [];\n    this.prevViewData = [];\n    this.gr = createNS('g');\n  }\n\n  function SVGTransformData(mProps, op, container) {\n    this.transform = {\n      mProps: mProps,\n      op: op,\n      container: container\n    };\n    this.elements = [];\n    this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n  }\n\n  var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return '';\n    }\n\n    var _o = pathNodes.o;\n    var _i = pathNodes.i;\n    var _v = pathNodes.v;\n    var i;\n    var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n    for (i = 1; i < length; i += 1) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n    }\n\n    if (closed && length) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n      shapeString += 'z';\n    }\n\n    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n\n    var _matrixHelper = new Matrix();\n\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n\n        case 'gf':\n          return renderGradient;\n\n        case 'gs':\n          return renderGradientStroke;\n\n        case 'st':\n          return renderStroke;\n\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n\n        case 'tr':\n          return renderContentTransform;\n\n        case 'no':\n          return renderNoop;\n\n        default:\n          return null;\n      }\n    }\n\n    function renderContentTransform(styleData, itemData, isFirstFrame) {\n      if (isFirstFrame || itemData.transform.op._mdf) {\n        itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n      }\n\n      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n\n    function renderNoop() {}\n\n    function renderPath(styleData, itemData, isFirstFrame) {\n      var j;\n      var jLen;\n      var pathStringTransformed;\n      var redraw;\n      var pathNodes;\n      var l;\n      var lLen = itemData.styles.length;\n      var lvl = itemData.lvl;\n      var paths;\n      var mat;\n      var iterations;\n      var k;\n\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\n\n        if (itemData.styles[l].lvl < lvl) {\n          mat = _matrixHelper.reset();\n          iterations = lvl - itemData.styles[l].lvl;\n          k = itemData.transformers.length - 1;\n\n          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\n\n            while (iterations > 0) {\n              mat.multiply(itemData.transformers[k].mProps.v);\n              iterations -= 1;\n              k -= 1;\n            }\n          }\n        } else {\n          mat = _identityMatrix;\n        }\n\n        paths = itemData.sh.paths;\n        jLen = paths._length;\n\n        if (redraw) {\n          pathStringTransformed = '';\n\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n\n      if (itemData.c._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\n    }\n\n    function renderGradient(styleData, itemData, isFirstFrame) {\n      var gfill = itemData.gf;\n      var hasOpacity = itemData.g._hasOpacity;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (itemData.o._mdf || isFirstFrame) {\n        var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n        itemData.style.pElem.setAttribute(attr, itemData.o.v);\n      }\n\n      if (itemData.s._mdf || isFirstFrame) {\n        var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n        var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n        gfill.setAttribute(attr1, pt1[0]);\n        gfill.setAttribute(attr2, pt1[1]);\n\n        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n\n      var stops;\n      var i;\n      var len;\n      var stop;\n\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          stop.setAttribute('offset', cValues[i * 4] + '%');\n          stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n        }\n      }\n\n      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n        }\n      }\n\n      if (styleData.t === 1) {\n        if (itemData.e._mdf || isFirstFrame) {\n          gfill.setAttribute('x2', pt2[0]);\n          gfill.setAttribute('y2', pt2[1]);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('x2', pt2[0]);\n            itemData.of.setAttribute('y2', pt2[1]);\n          }\n        }\n      } else {\n        var rad;\n\n        if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          gfill.setAttribute('r', rad);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n\n        if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n          if (!rad) {\n            rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          }\n\n          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\n          }\n\n          var dist = rad * percent;\n          var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n          var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n          gfill.setAttribute('fx', x);\n          gfill.setAttribute('fy', y);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        } // gfill.setAttribute('fy','200');\n\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\n\n      if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n        styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n        styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n      }\n\n      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n  SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n  /*\r\n  This method searches for multiple shapes that affect a single element and one of them is animated\r\n  */\n\n\n  SVGShapeElement.prototype.filterUniqueShapes = function () {\n    var i;\n    var len = this.shapes.length;\n    var shape;\n    var j;\n    var jLen = this.stylesList.length;\n    var style;\n    var tempShapes = [];\n    var areAnimated = false;\n\n    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\n    }\n  };\n\n  SVGShapeElement.prototype.createStyleElement = function (data, level) {\n    // TODO: prevent drawing of hidden styles\n    var elementData;\n    var styleOb = new SVGStyleData(data, level);\n    var pathElement = styleOb.pElem;\n\n    if (data.ty === 'st') {\n      elementData = new SVGStrokeStyleData(this, data, styleOb);\n    } else if (data.ty === 'fl') {\n      elementData = new SVGFillStyleData(this, data, styleOb);\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n      elementData = new GradientConstructor(this, data, styleOb);\n      this.globalData.defs.appendChild(elementData.gf);\n\n      if (elementData.maskId) {\n        this.globalData.defs.appendChild(elementData.ms);\n        this.globalData.defs.appendChild(elementData.of);\n        pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n      }\n    } else if (data.ty === 'no') {\n      elementData = new SVGNoStyleData(this, data, styleOb);\n    }\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n      pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n      pathElement.setAttribute('fill-opacity', '0');\n\n      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createTransformElement = function (data, container) {\n    var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n    var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n    var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n\n      i += 1;\n    }\n\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      if (!this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n  };\n\n  SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n    var ownTransformers = [].concat(transformers);\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var currentTransform;\n    var modifier;\n    var processedPos;\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], level);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\n          }\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n        if (arr[i]._render) {\n          if (itemsData[i].gr.parentNode !== container) {\n            container.appendChild(itemsData[i].gr);\n          }\n        }\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          itemsData[i] = this.createTransformElement(arr[i], container);\n        }\n\n        currentTransform = itemsData[i].transform;\n        ownTransformers.push(currentTransform);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n        }\n\n        this.setElementStyles(itemsData[i]);\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          render = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    len = ownStyles.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n\n    this.renderShape();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.stylesList[i]._mdf || this._isFirstFrame) {\n        if (this.stylesList[i].msElem) {\n          this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.destroy = function () {\n    this.destroyBaseElement();\n    this.shapesData = null;\n    this.itemsData = null;\n  };\n\n  function LetterProps(o, sw, sc, fc, m, p) {\n    this.o = o;\n    this.sw = sw;\n    this.sc = sc;\n    this.fc = fc;\n    this.m = m;\n    this.p = p;\n    this._mdf = {\n      o: true,\n      sw: !!sw,\n      sc: !!sc,\n      fc: !!fc,\n      m: true,\n      p: true\n    };\n  }\n\n  LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n    this._mdf.o = false;\n    this._mdf.sw = false;\n    this._mdf.sc = false;\n    this._mdf.fc = false;\n    this._mdf.m = false;\n    this._mdf.p = false;\n    var updated = false;\n\n    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\n    }\n\n    if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n      this.p = p;\n      this._mdf.p = true;\n      updated = true;\n    }\n\n    return updated;\n  };\n\n  function TextProperty(elem, data) {\n    this._frameId = initialDefaultFrame;\n    this.pv = '';\n    this.v = '';\n    this.kf = false;\n    this._isFirstFrame = true;\n    this._mdf = false;\n\n    if (data.d && data.d.sid) {\n      data.d = elem.globalData.slotManager.getProp(data.d);\n    }\n\n    this.data = data;\n    this.elem = elem;\n    this.comp = this.elem.comp;\n    this.keysIndex = 0;\n    this.canResize = false;\n    this.minimumFontSize = 1;\n    this.effectsSequence = [];\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false\n    };\n    this.copyData(this.currentData, this.data.d.k[0].s);\n\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s];\n      }\n    }\n\n    return obj;\n  };\n\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n\n    return this.kf;\n  };\n\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = false;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n    for (i = 0; i < len; i += 1) {\n      // Checking if index changed to prevent creating a new object every time the expression updates.\n      if (currentIndex !== this.keysIndex) {\n        finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n      } else {\n        finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n      }\n    }\n\n    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  };\n\n  TextProperty.prototype.getKeyframeValue = function () {\n    var textKeys = this.data.d.k;\n    var frameNum = this.elem.comp.renderedFrame;\n    var i = 0;\n    var len = textKeys.length;\n\n    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n\n    return this.data.d.k[this.keysIndex].s;\n  };\n\n  TextProperty.prototype.buildFinalText = function (text) {\n    var charactersArray = [];\n    var i = 0;\n    var len = text.length;\n    var charCode;\n    var secondCharCode;\n    var shouldCombine = false;\n    var shouldCombineNext = false;\n    var currentChars = '';\n\n    while (i < len) {\n      shouldCombine = shouldCombineNext;\n      shouldCombineNext = false;\n      charCode = text.charCodeAt(i);\n      currentChars = text.charAt(i);\n\n      if (FontManager.isCombinedCharacter(charCode)) {\n        shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n      } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n        if (FontManager.isRegionalFlag(text, i)) {\n          currentChars = text.substr(i, 14);\n        } else {\n          secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n          if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n            if (FontManager.isModifier(charCode, secondCharCode)) {\n              currentChars = text.substr(i, 2);\n              shouldCombine = true;\n            } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n              currentChars = text.substr(i, 4);\n            } else {\n              currentChars = text.substr(i, 2);\n            }\n          }\n        }\n      } else if (charCode > 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (FontManager.isVariationSelector(charCode)) {\n          shouldCombine = true;\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        shouldCombine = true;\n        shouldCombineNext = true;\n      }\n\n      if (shouldCombine) {\n        charactersArray[charactersArray.length - 1] += currentChars;\n        shouldCombine = false;\n      } else {\n        charactersArray.push(currentChars);\n      }\n\n      i += currentChars.length;\n    }\n\n    return charactersArray;\n  };\n\n  TextProperty.prototype.completeTextData = function (documentData) {\n    documentData.__complete = true;\n    var fontManager = this.elem.globalData.fontManager;\n    var data = this.data;\n    var letters = [];\n    var i;\n    var len;\n    var newLineFlag;\n    var index = 0;\n    var val;\n    var anchorGrouping = data.m.g;\n    var currentSize = 0;\n    var currentPos = 0;\n    var currentLine = 0;\n    var lineWidths = [];\n    var lineWidth = 0;\n    var maxLineWidth = 0;\n    var j;\n    var jLen;\n    var fontData = fontManager.getFontByName(documentData.f);\n    var charData;\n    var cLength = 0;\n    var fontProps = getFontProperties(fontData);\n    documentData.fWeight = fontProps.weight;\n    documentData.fStyle = fontProps.style;\n    documentData.finalSize = documentData.s;\n    documentData.finalText = this.buildFinalText(documentData.t);\n    len = documentData.finalText.length;\n    documentData.finalLineHeight = documentData.lh;\n    var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n    var charCode;\n\n    if (documentData.sz) {\n      var flag = true;\n      var boxWidth = documentData.sz[0];\n      var boxHeight = documentData.sz[1];\n      var currentHeight;\n      var finalText;\n\n      while (flag) {\n        finalText = this.buildFinalText(documentData.t);\n        currentHeight = 0;\n        lineWidth = 0;\n        len = finalText.length;\n        trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n        var lastSpaceIndex = -1;\n\n        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\n\n          if (finalText[i] === ' ') {\n            lastSpaceIndex = i;\n          } else if (charCode === 13 || charCode === 3) {\n            lineWidth = 0;\n            newLineFlag = true;\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n          }\n\n          if (fontManager.chars) {\n            charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n            cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n          } else {\n            // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n            cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n          }\n\n          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n        if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n          documentData.finalSize -= 1;\n          documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n        } else {\n          documentData.finalText = finalText;\n          len = documentData.finalText.length;\n          flag = false;\n        }\n      }\n    }\n\n    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\n\n      if (charCode === 13 || charCode === 3) {\n        uncollapsedSpaces = 0;\n        lineWidths.push(lineWidth);\n        maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n        lineWidth = -2 * trackingOffset;\n        val = '';\n        newLineFlag = true;\n        currentLine += 1;\n      } else {\n        val = currentChar;\n      }\n\n      if (fontManager.chars) {\n        charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n        cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n      } else {\n        // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n        // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n        cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n      } //\n\n\n      if (currentChar === ' ') {\n        uncollapsedSpaces += cLength + trackingOffset;\n      } else {\n        lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n        uncollapsedSpaces = 0;\n      }\n\n      letters.push({\n        l: cLength,\n        an: cLength,\n        add: currentSize,\n        n: newLineFlag,\n        anIndexes: [],\n        val: val,\n        line: currentLine,\n        animatorJustifyOffset: 0\n      });\n\n      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n\n        default:\n          documentData.justifyOffset = 0;\n      }\n    }\n\n    documentData.lineWidths = lineWidths;\n    var animators = data.a;\n    var animatorData;\n    var letterData;\n    jLen = animators.length;\n    var based;\n    var ind;\n    var indexes = [];\n\n    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n\n      ind = 0;\n      based = animatorData.s.b;\n\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\n\n        if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind);\n          }\n\n          ind += 1;\n        }\n      }\n\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\n\n          if (currentInd != letterData.anIndexes[j]) {\n            // eslint-disable-line eqeqeq\n            currentInd = letterData.anIndexes[j];\n            newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n          }\n\n          letterData.anIndexes[j] = newInd;\n        }\n      }\n    }\n\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n    documentData.ls = documentData.ls || 0;\n    documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n  };\n\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index;\n    var dData = this.copyData({}, this.data.d.k[index].s);\n    dData = this.copyData(dData, newData);\n    this.data.d.k[index].s = dData;\n    this.recalculate(index);\n    this.setCurrentData(dData);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s;\n    dData.__complete = false;\n    this.keysIndex = 0;\n    this._isFirstFrame = true;\n    this.getValue(dData);\n  };\n\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  var TextSelectorProp = function () {\n    var max = Math.max;\n    var min = Math.min;\n    var floor = Math.floor;\n\n    function TextSelectorPropFactory(elem, data) {\n      this._currentTextLength = -1;\n      this.k = false;\n      this.data = data;\n      this.elem = elem;\n      this.comp = elem.comp;\n      this.finalS = 0;\n      this.finalE = 0;\n      this.initDynamicPropertyContainer(elem);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: 0\n      }, 0, 0, this);\n\n      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n      } else {\n        this.e = {\n          v: 100\n        };\n      }\n\n      this.o = PropertyFactory.getProp(elem, data.o || {\n        k: 0\n      }, 0, 0, this);\n      this.xe = PropertyFactory.getProp(elem, data.xe || {\n        k: 0\n      }, 0, 0, this);\n      this.ne = PropertyFactory.getProp(elem, data.ne || {\n        k: 0\n      }, 0, 0, this);\n      this.sm = PropertyFactory.getProp(elem, data.sm || {\n        k: 100\n      }, 0, 0, this);\n      this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n      if (!this.dynamicProperties.length) {\n        this.getValue();\n      }\n    }\n\n    TextSelectorPropFactory.prototype = {\n      getMult: function getMult(ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue();\n        }\n\n        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\n        }\n\n        if (this.xe.v > 0) {\n          x2 = 1.0 - this.xe.v / 100.0;\n        } else {\n          y2 = 1.0 + this.xe.v / 100.0;\n        }\n\n        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n        var mult = 0;\n        var s = this.finalS;\n        var e = this.finalE;\n        var type = this.data.sh;\n\n        if (type === 2) {\n          if (e === s) {\n            mult = ind >= e ? 1 : 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 3) {\n          if (e === s) {\n            mult = ind >= e ? 0 : 1;\n          } else {\n            mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 4) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\n            }\n          }\n\n          mult = easer(mult);\n        } else if (type === 5) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            var tot = e - s;\n            /* ind += 0.5;\r\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            var x = -tot / 2 + ind;\n            var a = tot / 2;\n            mult = Math.sqrt(1 - x * x / (a * a));\n          }\n\n          mult = easer(mult);\n        } else if (type === 6) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n          }\n\n          mult = easer(mult);\n        } else {\n          if (ind >= floor(s)) {\n            if (ind - s < 0) {\n              mult = max(0, min(min(e, 1) - (s - ind), 1));\n            } else {\n              mult = max(0, min(e - ind, 1));\n            }\n          }\n\n          mult = easer(mult);\n        } // Smoothness implementation.\n        // The smoothness represents a reduced range of the original [0; 1] range.\n        // if smoothness is 25%, the new range will be [0.375; 0.625]\n        // Steps are:\n        // - find the lower value of the new range (threshold)\n        // - if multiplier is smaller than that value, floor it to 0\n        // - if it is larger,\n        //     - subtract the threshold\n        //     - divide it by the smoothness (this will return the range to [0; 1])\n        // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n\n          var threshold = 0.5 - smoothness * 0.5;\n\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n\n            if (mult > 1) {\n              mult = 1;\n            }\n          }\n        }\n\n        return mult * this.a.v;\n      },\n      getValue: function getValue(newCharsFlag) {\n        this.iterateDynamicProperties();\n        this._mdf = newCharsFlag || this._mdf;\n        this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\n        }\n\n        var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n        var o = this.o.v / divisor;\n        var s = this.s.v / divisor + o;\n        var e = this.e.v / divisor + o;\n\n        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\n    }\n\n    return {\n      getTextSelectorProp: getTextSelectorProp\n    };\n  }();\n\n  function TextAnimatorDataProperty(elem, animatorProps, container) {\n    var defaultData = {\n      propType: false\n    };\n    var getProp = PropertyFactory.getProp;\n    var textAnimatorAnimatables = animatorProps.a;\n    this.a = {\n      r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n      rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n      ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n      sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n      sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n      s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n      a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n      o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n      p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n      sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n      sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n      fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n      fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n      fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n      fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n      t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n    };\n    this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n    this.s.t = animatorProps.s.t;\n  }\n\n  function TextAnimatorProperty(textData, renderType, elem) {\n    this._isFirstFrame = true;\n    this._hasMaskedPath = false;\n    this._frameId = -1;\n    this._textData = textData;\n    this._renderType = renderType;\n    this._elem = elem;\n    this._animatorsData = createSizedArray(this._textData.a.length);\n    this._pathData = {};\n    this._moreOptions = {\n      alignment: {}\n    };\n    this.renderedLetters = [];\n    this.lettersChangedFlag = false;\n    this.initDynamicPropertyContainer(elem);\n  }\n\n  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\n\n    for (i = 0; i < len; i += 1) {\n      animatorProps = this._textData.a[i];\n      this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n    }\n\n    if (this._textData.p && 'm' in this._textData.p) {\n      this._pathData = {\n        a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n        f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n        l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n        r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n        p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n        m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n      };\n      this._hasMaskedPath = true;\n    } else {\n      this._hasMaskedPath = false;\n    }\n\n    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\n    }\n\n    this._isFirstFrame = false;\n    var alignment = this._moreOptions.alignment.v;\n    var animators = this._animatorsData;\n    var textData = this._textData;\n    var matrixHelper = this.mHelper;\n    var renderType = this._renderType;\n    var renderedLettersCount = this.renderedLetters.length;\n    var xPos;\n    var yPos;\n    var i;\n    var len;\n    var letters = documentData.l;\n    var pathInfo;\n    var currentLength;\n    var currentPoint;\n    var segmentLength;\n    var flag;\n    var pointInd;\n    var segmentInd;\n    var prevPoint;\n    var points;\n    var segments;\n    var partialLength;\n    var totalLength;\n    var perc;\n    var tanAngle;\n    var mask;\n\n    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\n\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        i = len;\n\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        this._pathData.pi = pathInfo;\n      }\n\n      pathInfo = this._pathData.pi;\n      currentLength = this._pathData.f.v;\n      segmentInd = 0;\n      pointInd = 1;\n      segmentLength = 0;\n      flag = true;\n      segments = pathInfo.segments;\n\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\n    }\n\n    len = letters.length;\n    xPos = 0;\n    yPos = 0;\n    var yOff = documentData.finalSize * 1.2 * 0.714;\n    var firstLine = true;\n    var animatorProps;\n    var animatorSelector;\n    var j;\n    var jLen;\n    var letterValue;\n    jLen = animators.length;\n    var mult;\n    var ind = -1;\n    var offf;\n    var xPathPos;\n    var yPathPos;\n    var initPathPos = currentLength;\n    var initSegmentInd = segmentInd;\n    var initPointInd = pointInd;\n    var currentLine = -1;\n    var elemOpacity;\n    var sc;\n    var sw;\n    var fc;\n    var k;\n    var letterSw;\n    var letterSc;\n    var letterFc;\n    var letterM = '';\n    var letterP = this.defaultPropsArray;\n    var letterO; //\n\n    if (documentData.j === 2 || documentData.j === 1) {\n      var animatorJustifyOffset = 0;\n      var animatorFirstCharOffset = 0;\n      var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n      var lastIndex = 0;\n      var isNewLine = true;\n\n      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n              } else {\n                animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n              }\n            }\n          }\n\n          isNewLine = false;\n        }\n      }\n\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\n      }\n\n      while (lastIndex < i) {\n        letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n        lastIndex += 1;\n      }\n    } //\n\n\n    for (i = 0; i < len; i += 1) {\n      matrixHelper.reset();\n      elemOpacity = 1;\n\n      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\n\n        if (this._hasMaskedPath) {\n          segmentInd = initSegmentInd;\n          pointInd = initPointInd;\n          points = segments[segmentInd].points;\n          prevPoint = points[pointInd - 1];\n          currentPoint = points[pointInd];\n          partialLength = currentPoint.partialLength;\n          segmentLength = 0;\n        }\n\n        letterM = '';\n        letterFc = '';\n        letterSw = '';\n        letterO = '';\n        letterP = this.defaultPropsArray;\n      } else {\n        if (this._hasMaskedPath) {\n          if (currentLine !== letters[i].line) {\n            switch (documentData.j) {\n              case 1:\n                currentLength += totalLength - documentData.lineWidths[letters[i].line];\n                break;\n\n              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n\n              default:\n                break;\n            }\n\n            currentLine = letters[i].line;\n          }\n\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\n              }\n            }\n\n            if (animatorProps.a.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n\n          flag = true; // Force alignment only works with a single line for now\n\n          if (this._pathData.a.v) {\n            currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n            currentLength += this._pathData.f.v;\n          }\n\n          while (flag) {\n            if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n              perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n              xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n              yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n              matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n              flag = false;\n            } else if (points) {\n              segmentLength += currentPoint.partialLength;\n              pointInd += 1;\n\n              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\n\n                if (!segments[segmentInd]) {\n                  if (mask.v.c) {\n                    pointInd = 0;\n                    segmentInd = 0;\n                    points = segments[segmentInd].points;\n                  } else {\n                    segmentLength -= currentPoint.partialLength;\n                    points = null;\n                  }\n                } else {\n                  points = segments[segmentInd].points;\n                }\n              }\n\n              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\n              }\n            }\n          }\n\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n        } else {\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n            if (xPos !== 0 || documentData.j !== 0) {\n              if (this._hasMaskedPath) {\n                if (mult.length) {\n                  currentLength += animatorProps.t.v * mult[0];\n                } else {\n                  currentLength += animatorProps.t.v * mult;\n                }\n              } else if (mult.length) {\n                xPos += animatorProps.t.v * mult[0];\n              } else {\n                xPos += animatorProps.t.v * mult;\n              }\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\n        }\n\n        if (documentData.strokeColorAnim) {\n          if (documentData.sc) {\n            sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n          } else {\n            sc = [0, 0, 0];\n          }\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n            } else {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          animatorSelector = animators[j].s;\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n          if (animatorProps.sk.propType) {\n            if (mult.length) {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n            } else {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n            }\n          }\n\n          if (animatorProps.r.propType) {\n            if (mult.length) {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n            } else {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult);\n            }\n          }\n\n          if (animatorProps.ry.propType) {\n            if (mult.length) {\n              matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n            } else {\n              matrixHelper.rotateY(animatorProps.ry.v * mult);\n            }\n          }\n\n          if (animatorProps.rx.propType) {\n            if (mult.length) {\n              matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n            } else {\n              matrixHelper.rotateX(animatorProps.rx.v * mult);\n            }\n          }\n\n          if (animatorProps.o.propType) {\n            if (mult.length) {\n              elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n            } else {\n              elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n            }\n          }\n\n          if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n            if (mult.length) {\n              sw += animatorProps.sw.v * mult[0];\n            } else {\n              sw += animatorProps.sw.v * mult;\n            }\n          }\n\n          if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n            for (k = 0; k < 3; k += 1) {\n              if (mult.length) {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n              } else {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n              }\n            }\n          }\n\n          if (documentData.fillColorAnim && documentData.fc) {\n            if (animatorProps.fc.propType) {\n              for (k = 0; k < 3; k += 1) {\n                if (mult.length) {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n                } else {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n                }\n              }\n            }\n\n            if (animatorProps.fh.propType) {\n              if (mult.length) {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n              } else {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n              }\n            }\n\n            if (animatorProps.fs.propType) {\n              if (mult.length) {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n              } else {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n              }\n            }\n\n            if (animatorProps.fb.propType) {\n              if (mult.length) {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n              } else {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n              }\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (this._hasMaskedPath) {\n              if (mult.length) {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n              } else {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n              }\n            } else if (mult.length) {\n              matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\n        }\n\n        if (documentData.strokeColorAnim) {\n          letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n        }\n\n        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n          if (this._pathData.p.v) {\n            tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n            var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\n\n          if (letters[i + 1] && ind !== letters[i + 1].ind) {\n            currentLength += letters[i].an / 2;\n            currentLength += documentData.tr * 0.001 * documentData.finalSize;\n          }\n        } else {\n          matrixHelper.translate(xPos, yPos, 0);\n\n          if (documentData.ps) {\n            // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n            matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n          }\n\n          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n              break;\n\n            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n\n            default:\n              break;\n          }\n\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(offf, 0, 0);\n          matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n          xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n        }\n\n        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS();\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS();\n        } else {\n          letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n        }\n\n        letterO = elemOpacity;\n      }\n\n      if (renderedLettersCount <= i) {\n        letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n        this.renderedLetters.push(letterValue);\n        renderedLettersCount += 1;\n        this.lettersChangedFlag = true;\n      } else {\n        letterValue = this.renderedLetters[i];\n        this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n      }\n    }\n  };\n\n  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\n\n  ITextElement.prototype.initElement = function (data, globalData, comp) {\n    this.lettersChangedFlag = true;\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n    this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n    this.initRenderable();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    this.createContent();\n    this.hide();\n    this.textAnimator.searchProperties(this.dynamicProperties);\n  };\n\n  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n  };\n\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\n\n    for (j = 0; j < jLen; j += 1) {\n      if (shapes[j].ty === 'sh') {\n        pathNodes = shapes[j].ks.k;\n        shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n      }\n    }\n\n    return shapeStr;\n  };\n\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\n  };\n\n  ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n    if (documentData.ps) {\n      matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n    }\n\n    matrixHelper.translate(0, -documentData.ls, 0);\n\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n\n      default:\n        break;\n    }\n\n    matrixHelper.translate(xPos, yPos, 0);\n  };\n\n  ITextElement.prototype.buildColor = function (colorData) {\n    return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n  };\n\n  ITextElement.prototype.emptyProp = new LetterProps();\n\n  ITextElement.prototype.destroy = function () {};\n\n  ITextElement.prototype.validateText = function () {\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  var emptyShapeData = {\n    shapes: []\n  };\n\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\n\n    while (i < len) {\n      if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n        textContents.push(currentTextContent);\n        currentTextContent = '';\n      } else {\n        currentTextContent += textArray[i];\n      }\n\n      i += 1;\n    }\n\n    textContents.push(currentTextContent);\n    return textContents;\n  };\n\n  SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n    // data should probably be cloned to apply scale separately to each instance of a text on different layers\n    // but since text internal content gets only rendered once and then it's never rerendered,\n    // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n    // Avoiding cloning is preferred since cloning each character shape data is expensive\n    if (data.shapes && data.shapes.length) {\n      var shape = data.shapes[0];\n\n      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n\n    return data;\n  };\n\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this);\n    var i;\n    var len;\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n    if (documentData.fc) {\n      this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n    } else {\n      this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n    }\n\n    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (fontData.fClass) {\n      this.layerElement.setAttribute('class', fontData.fClass);\n    } else {\n      this.layerElement.setAttribute('font-family', fontData.fFamily);\n      var fWeight = documentData.fWeight;\n      var fStyle = documentData.fStyle;\n      this.layerElement.setAttribute('font-style', fStyle);\n      this.layerElement.setAttribute('font-weight', fWeight);\n    }\n\n    this.layerElement.setAttribute('aria-label', documentData.t);\n    var letters = documentData.l || [];\n    var usesGlyphs = !!this.globalData.fontManager.chars;\n    len = letters.length;\n    var tSpan;\n    var matrixHelper = this.mHelper;\n    var shapeStr = '';\n    var singleShape = this.data.singleShape;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n\n        case 2:\n          justify = 'middle';\n          break;\n\n        default:\n          justify = 'start';\n          break;\n      }\n\n      tElement.setAttribute('text-anchor', justify);\n      tElement.setAttribute('letter-spacing', trackingOffset);\n      var textContent = this.buildTextContents(documentData.finalText);\n      len = textContent.length;\n      yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n      for (i = 0; i < len; i += 1) {\n        tSpan = this.textSpans[i].span || createNS('tspan');\n        tSpan.textContent = textContent[i];\n        tSpan.setAttribute('x', 0);\n        tSpan.setAttribute('y', yPos);\n        tSpan.style.display = 'inherit';\n        tElement.appendChild(tSpan);\n\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\n\n      for (i = 0; i < len; i += 1) {\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            childSpan: null,\n            glyph: null\n          };\n        }\n\n        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n          if (cachedSpansLength <= i) {\n            tSpan.setAttribute('stroke-linecap', 'butt');\n            tSpan.setAttribute('stroke-linejoin', 'round');\n            tSpan.setAttribute('stroke-miterlimit', '4');\n            this.textSpans[i].span = tSpan;\n\n            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n\n          tSpan.style.display = 'inherit';\n        }\n\n        matrixHelper.reset();\n\n        if (singleShape) {\n          if (letters[i].n) {\n            xPos = -trackingOffset;\n            yPos += documentData.yOffset;\n            yPos += firstLine ? 1 : 0;\n            firstLine = false;\n          }\n\n          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n          xPos += trackingOffset;\n        }\n\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n          var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\n          }\n\n          if (this.textSpans[i].glyph) {\n            var glyph = this.textSpans[i].glyph;\n            this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n            glyph.destroy();\n          }\n\n          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n          // this might have issues with strokes and might need a different solution\n\n          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n          }\n\n          tSpan.textContent = letters[i].val;\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        } //\n\n      }\n\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr);\n      }\n    }\n\n    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n\n    this._sizeChanged = true;\n  };\n\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\n\n    if (this._sizeChanged) {\n      this._sizeChanged = false;\n      var textBox = this.layerElement.getBBox();\n      this.bbox = {\n        top: textBox.y,\n        left: textBox.x,\n        width: textBox.width,\n        height: textBox.height\n      };\n    }\n\n    return this.bbox;\n  };\n\n  SVGTextLottieElement.prototype.getValue = function () {\n    var i;\n    var len = this.textSpans.length;\n    var glyphElement;\n    this.renderedFrame = this.comp.renderedFrame;\n\n    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    this.validateText();\n\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n      if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n        this._sizeChanged = true;\n        var i;\n        var len;\n        var renderedLetters = this.textAnimator.renderedLetters;\n        var letters = this.textProperty.currentData.l;\n        len = letters.length;\n        var renderedLetter;\n        var textSpan;\n        var glyphElement;\n\n        for (i = 0; i < len; i += 1) {\n          if (!letters[i].n) {\n            renderedLetter = renderedLetters[i];\n            textSpan = this.textSpans[i].span;\n            glyphElement = this.textSpans[i].glyph;\n\n            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\n            }\n\n            if (renderedLetter._mdf.fc) {\n              textSpan.setAttribute('fill', renderedLetter.fc);\n            }\n          }\n        }\n      }\n    }\n  };\n\n  function ISolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([IImageElement], ISolidElement);\n\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\n\n    rect.setAttribute('width', this.data.sw);\n    rect.setAttribute('height', this.data.sh);\n    rect.setAttribute('fill', this.data.sc);\n    this.layerElement.appendChild(rect);\n  };\n\n  function NullElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initFrame();\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n  }\n\n  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  NullElement.prototype.renderFrame = function () {};\n\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  NullElement.prototype.destroy = function () {};\n\n  NullElement.prototype.sourceRectAtTime = function () {};\n\n  NullElement.prototype.hide = function () {};\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n\n  extendPrototype([BaseRenderer], SVGRendererBase);\n\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.configAnimation = function (animData) {\n    this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n    if (this.renderConfig.viewBoxSize) {\n      this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n    } else {\n      this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n    }\n\n    if (!this.renderConfig.viewBoxOnly) {\n      this.svgElement.setAttribute('width', animData.w);\n      this.svgElement.setAttribute('height', animData.h);\n      this.svgElement.style.width = '100%';\n      this.svgElement.style.height = '100%';\n      this.svgElement.style.transform = 'translate3d(0,0,0)';\n      this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n    }\n\n    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n    // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n    this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n    var defs = this.globalData.defs;\n    this.setupGlobalData(animData, defs);\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.data = animData;\n    var maskElement = createNS('clipPath');\n    var rect = createNS('rect');\n    rect.setAttribute('width', animData.w);\n    rect.setAttribute('height', animData.h);\n    rect.setAttribute('x', 0);\n    rect.setAttribute('y', 0);\n    var maskId = createElementID();\n    maskElement.setAttribute('id', maskId);\n    maskElement.appendChild(rect);\n    this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n    defs.appendChild(maskElement);\n    this.layers = animData.layers;\n    this.elements = createSizedArray(animData.layers.length);\n  };\n\n  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n\n  SVGRendererBase.prototype.findIndexByInd = function (ind) {\n    var i = 0;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ind === ind) {\n        return i;\n      }\n    }\n\n    return -1;\n  };\n\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n\n      element.initExpressions();\n    }\n\n    this.appendElementInPos(element, pos);\n\n    if (this.layers[pos].tt) {\n      var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n      if (elementIndex === -1) {\n        return;\n      }\n\n      if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n        this.buildItem(elementIndex);\n        this.addPendingElement(element);\n      } else {\n        var matteElement = elements[elementIndex];\n        var matteMask = matteElement.getMatte(this.layers[pos].tt);\n        element.setMatte(matteMask);\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\n\n        while (i < len) {\n          if (this.elements[i] === element) {\n            var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n            var matteElement = this.elements[elementIndex];\n            var matteMask = matteElement.getMatte(this.layers[i].tt);\n            element.setMatte(matteMask);\n            break;\n          }\n\n          i += 1;\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    } // console.log('-------');\n    // console.log('FRAME ',num);\n\n\n    this.globalData.frameNum = num;\n    this.globalData.frameId += 1;\n    this.globalData.projectInterface.currentFrame = num;\n    this.globalData._mdf = false;\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      for (i = 0; i < len; i += 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n\n    if (!newElement) {\n      return;\n    }\n\n    var i = 0;\n    var nextElement;\n\n    while (i < pos) {\n      if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n        nextElement = this.elements[i].getBaseElement();\n      }\n\n      i += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n  ICompElement.prototype.initElement = function (data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initTransform(data, globalData, comp);\n    this.initRenderable();\n    this.initHierarchy();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n\n    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n\n    this.hide();\n  };\n  /* ICompElement.prototype.hide = function(){\r\n      if(!this.hidden){\r\n          this.hideElement();\r\n          var i,len = this.elements.length;\r\n          for( i = 0; i < len; i+=1 ){\r\n              if(this.elements[i]){\r\n                  this.elements[i].hide();\r\n              }\r\n          }\r\n      }\r\n  }; */\n\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n\n    var i;\n    var len = this.elements.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n  };\n\n  ICompElement.prototype.destroy = function () {\n    this.destroyElements();\n    this.destroyBaseElement();\n  };\n\n  function SVGCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = true;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n  SVGCompElement.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function SVGRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.svgElement = createNS('svg');\n    var ariaLabel = '';\n\n    if (config && config.title) {\n      var titleElement = createNS('title');\n      var titleId = createElementID();\n      titleElement.setAttribute('id', titleId);\n      titleElement.textContent = config.title;\n      this.svgElement.appendChild(titleElement);\n      ariaLabel += titleId;\n    }\n\n    if (config && config.description) {\n      var descElement = createNS('desc');\n      var descId = createElementID();\n      descElement.setAttribute('id', descId);\n      descElement.textContent = config.description;\n      this.svgElement.appendChild(descElement);\n      ariaLabel += ' ' + descId;\n    }\n\n    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n    }\n\n    var defs = createNS('defs');\n    this.svgElement.appendChild(defs);\n    var maskElement = createNS('g');\n    this.svgElement.appendChild(maskElement);\n    this.layerElement = maskElement;\n    this.renderConfig = {\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      progressiveLoad: config && config.progressiveLoad || false,\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      viewBoxOnly: config && config.viewBoxOnly || false,\n      viewBoxSize: config && config.viewBoxSize || false,\n      className: config && config.className || '',\n      id: config && config.id || '',\n      focusable: config && config.focusable,\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '100%',\n        height: config && config.filterSize && config.filterSize.height || '100%',\n        x: config && config.filterSize && config.filterSize.x || '0%',\n        y: config && config.filterSize && config.filterSize.y || '0%'\n      },\n      width: config && config.width,\n      height: config && config.height,\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig\n    };\n    this.elements = [];\n    this.pendingElements = [];\n    this.destroyed = false;\n    this.rendererType = 'svg';\n  }\n\n  extendPrototype([SVGRendererBase], SVGRenderer);\n\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function ShapeTransformManager() {\n    this.sequences = {};\n    this.sequenceList = [];\n    this.transform_key_count = 0;\n  }\n\n  ShapeTransformManager.prototype = {\n    addTransformSequence: function addTransformSequence(transforms) {\n      var i;\n      var len = transforms.length;\n      var key = '_';\n\n      for (i = 0; i < len; i += 1) {\n        key += transforms[i].transform.key + '_';\n      }\n\n      var sequence = this.sequences[key];\n\n      if (!sequence) {\n        sequence = {\n          transforms: [].concat(transforms),\n          finalTransform: new Matrix(),\n          _mdf: false\n        };\n        this.sequences[key] = sequence;\n        this.sequenceList.push(sequence);\n      }\n\n      return sequence;\n    },\n    processSequence: function processSequence(sequence, isFirstFrame) {\n      var i = 0;\n      var len = sequence.transforms.length;\n      var _mdf = isFirstFrame;\n\n      while (i < len && !isFirstFrame) {\n        if (sequence.transforms[i].transform.mProps._mdf) {\n          _mdf = true;\n          break;\n        }\n\n        i += 1;\n      }\n\n      if (_mdf) {\n        sequence.finalTransform.reset();\n\n        for (i = len - 1; i >= 0; i -= 1) {\n          sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n        }\n      }\n\n      sequence._mdf = _mdf;\n    },\n    processSequences: function processSequences(isFirstFrame) {\n      var i;\n      var len = this.sequenceList.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.processSequence(this.sequenceList[i], isFirstFrame);\n      }\n    },\n    getNewKey: function getNewKey() {\n      this.transform_key_count += 1;\n      return '_' + this.transform_key_count;\n    }\n  };\n\n  var lumaLoader = function lumaLoader() {\n    var id = '__lottie_element_luma_buffer';\n    var lumaBuffer = null;\n    var lumaBufferCtx = null;\n    var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n    // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n    // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n    // Naming it solution 2 to mark the extra comment lines.\n\n    /*\r\n    var svgString = [\r\n      '<svg xmlns=\"http://www.w3.org/2000/svg\">',\r\n      '<filter id=\"' + id + '\">',\r\n      '<feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0',\r\n      '\"/>',\r\n      '</filter>',\r\n      '</svg>',\r\n    ].join('');\r\n    var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n    var url = URL.createObjectURL(blob);\r\n    */\n\n    function createLumaSvgFilter() {\n      var _svg = createNS('svg');\n\n      var fil = createNS('filter');\n      var matrix = createNS('feColorMatrix');\n      fil.setAttribute('id', id);\n      matrix.setAttribute('type', 'matrix');\n      matrix.setAttribute('color-interpolation-filters', 'sRGB');\n      matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n      fil.appendChild(matrix);\n\n      _svg.appendChild(fil);\n\n      _svg.setAttribute('id', id + '_svg');\n\n      if (featureSupport.svgLumaHidden) {\n        _svg.style.display = 'none';\n      }\n\n      return _svg;\n    }\n\n    function loadLuma() {\n      if (!lumaBuffer) {\n        svg = createLumaSvgFilter();\n        document.body.appendChild(svg);\n        lumaBuffer = createTag('canvas');\n        lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n        lumaBufferCtx.filter = 'url(#' + id + ')';\n        lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n        lumaBufferCtx.fillRect(0, 0, 1, 1);\n      }\n    }\n\n    function getLuma(canvas) {\n      if (!lumaBuffer) {\n        loadLuma();\n      }\n\n      lumaBuffer.width = canvas.width;\n      lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n      lumaBufferCtx.filter = 'url(#' + id + ')';\n      return lumaBuffer;\n    }\n\n    return {\n      load: loadLuma,\n      get: getLuma\n    };\n  };\n\n  function createCanvas(width, height) {\n    if (featureSupport.offscreenCanvas) {\n      return new OffscreenCanvas(width, height);\n    }\n\n    var canvas = createTag('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n\n  var assetLoader = function () {\n    return {\n      loadLumaCanvas: lumaLoader.load,\n      getLumaCanvas: lumaLoader.get,\n      createCanvas: createCanvas\n    };\n  }();\n\n  var registeredEffects = {};\n\n  function CVEffects(elem) {\n    var i;\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  CVEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect(id, effect) {\n    registeredEffects[id] = {\n      effect: effect\n    };\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    var len = this.masksProperties.length;\n    var hasMasks = false;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        hasMasks = true;\n      }\n\n      this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n    }\n\n    this.hasMasks = hasMasks;\n\n    if (hasMasks) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  CVMaskElement.prototype.renderFrame = function () {\n    if (!this.hasMasks) {\n      return;\n    }\n\n    var transform = this.element.finalTransform.mat;\n    var ctx = this.element.canvasContext;\n    var i;\n    var len = this.masksProperties.length;\n    var pt;\n    var pts;\n    var data;\n    ctx.beginPath();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.masksProperties[i].inv) {\n          ctx.moveTo(0, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n          ctx.lineTo(0, this.element.globalData.compSize.h);\n          ctx.lineTo(0, 0);\n        }\n\n        data = this.viewData[i].v;\n        pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n        ctx.moveTo(pt[0], pt[1]);\n        var j;\n        var jLen = data._length;\n\n        for (j = 1; j < jLen; j += 1) {\n          pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n          ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n        }\n\n        pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n        ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n      }\n    }\n\n    this.element.globalData.renderer.save(true);\n    ctx.clip();\n  };\n\n  CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n  CVMaskElement.prototype.destroy = function () {\n    this.element = null;\n  };\n\n  function CVBaseElement() {}\n\n  var operationsMap = {\n    1: 'source-in',\n    2: 'source-out',\n    3: 'source-in',\n    4: 'source-out'\n  };\n  CVBaseElement.prototype = {\n    createElements: function createElements() {},\n    initRendererElement: function initRendererElement() {},\n    createContainerElements: function createContainerElements() {\n      // If the layer is masked we will use two buffers to store each different states of the drawing\n      // This solution is not ideal for several reason. But unfortunately, because of the recursive\n      // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n      // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n      // It might be challenging because the layer most likely is transformed in some way\n      if (this.data.tt >= 1) {\n        this.buffers = [];\n        var canvasContext = this.globalData.canvasContext;\n        var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas);\n        var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas2);\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          assetLoader.loadLumaCanvas();\n        }\n      }\n\n      this.canvasContext = this.globalData.canvasContext;\n      this.transformCanvas = this.globalData.transformCanvas;\n      this.renderableEffectsManager = new CVEffects(this);\n      this.searchEffectTransforms();\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      this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\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    clearCanvas: function clearCanvas(canvasContext) {\n      canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n    },\n    prepareLayer: function prepareLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[0];\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n        // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n        this.currentTransform = this.canvasContext.getTransform();\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform);\n      }\n    },\n    exitLayer: function exitLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n        // that only contains the content of this layer\n        // (if it is a composition, it also includes the nested layers)\n\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx);\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n        var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n        mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n        // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          // We copy the painted mask to a buffer that has a color matrix filter applied to it\n          // that applies the rgb values to the alpha channel\n          var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n          var lumaBufferCtx = lumaBuffer.getContext('2d');\n          lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n          this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n          this.canvasContext.drawImage(lumaBuffer, 0, 0);\n        }\n\n        this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n        this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n        // We use destination-over to draw the global drawing below the current layer\n\n        this.canvasContext.globalCompositeOperation = 'destination-over';\n        this.canvasContext.drawImage(this.buffers[0], 0, 0);\n        this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n        this.canvasContext.globalCompositeOperation = 'source-over';\n      }\n    },\n    renderFrame: function renderFrame(forceRender) {\n      if (this.hidden || this.data.hd) {\n        return;\n      }\n\n      if (this.data.td === 1 && !forceRender) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderLocalTransform();\n      this.setBlendMode();\n      var forceRealStack = this.data.ty === 0;\n      this.prepareLayer();\n      this.globalData.renderer.save(forceRealStack);\n      this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n      this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n      this.renderInnerContent();\n      this.globalData.renderer.restore(forceRealStack);\n      this.exitLayer();\n\n      if (this.maskManager.hasMasks) {\n        this.globalData.renderer.restore(true);\n      }\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.canvasContext = null;\n      this.data = null;\n      this.globalData = null;\n      this.maskManager.destroy();\n    },\n    mHelper: new Matrix()\n  };\n  CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n  CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n  function CVShapeData(element, data, styles, transformsManager) {\n    this.styledShapes = [];\n    this.tr = [0, 0, 0, 0, 0, 0];\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n    var i;\n    var len = styles.length;\n    var styledShape;\n\n    for (i = 0; i < len; i += 1) {\n      if (!styles[i].closed) {\n        styledShape = {\n          transforms: transformsManager.addTransformSequence(styles[i].transforms),\n          trNodes: []\n        };\n        this.styledShapes.push(styledShape);\n        styles[i].elements.push(styledShape);\n      }\n    }\n  }\n\n  CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n  function CVShapeElement(data, globalData, comp) {\n    this.shapes = [];\n    this.shapesData = data.shapes;\n    this.stylesList = [];\n    this.itemsData = [];\n    this.prevViewData = [];\n    this.shapeModifiers = [];\n    this.processedElements = [];\n    this.transformsManager = new ShapeTransformManager();\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n  CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n  CVShapeElement.prototype.transformHelper = {\n    opacity: 1,\n    _opMdf: false\n  };\n  CVShapeElement.prototype.dashResetter = [];\n\n  CVShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n  };\n\n  CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n    var styleElem = {\n      data: data,\n      type: data.ty,\n      preTransforms: this.transformsManager.addTransformSequence(transforms),\n      transforms: [],\n      elements: [],\n      closed: data.hd === true\n    };\n    var elementData = {};\n\n    if (data.ty === 'fl' || data.ty === 'st') {\n      elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n      if (!elementData.c.k) {\n        styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n      }\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n      elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n      elementData.h = PropertyFactory.getProp(this, data.h || {\n        k: 0\n      }, 0, 0.01, this);\n      elementData.a = PropertyFactory.getProp(this, data.a || {\n        k: 0\n      }, 0, degToRads, this);\n      elementData.g = new GradientProperty(this, data.g, this);\n    }\n\n    elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      styleElem.lc = lineCapEnum[data.lc || 2];\n      styleElem.lj = lineJoinEnum[data.lj || 2];\n\n      if (data.lj == 1) {\n        // eslint-disable-line eqeqeq\n        styleElem.ml = data.ml;\n      }\n\n      elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n      if (!elementData.w.k) {\n        styleElem.wi = elementData.w.v;\n      }\n\n      if (data.d) {\n        var d = new DashProperty(this, data.d, 'canvas', this);\n        elementData.d = d;\n\n        if (!elementData.d.k) {\n          styleElem.da = elementData.d.dashArray;\n          styleElem[\"do\"] = elementData.d.dashoffset[0];\n        }\n      }\n    } else {\n      styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n    }\n\n    this.stylesList.push(styleElem);\n    elementData.style = styleElem;\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createGroupElement = function () {\n    var elementData = {\n      it: [],\n      prevViewData: []\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createTransformElement = function (data) {\n    var elementData = {\n      transform: {\n        opacity: 1,\n        _opMdf: false,\n        key: this.transformsManager.getNewKey(),\n        op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n        mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n      }\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createShapeElement = function (data) {\n    var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    return elementData;\n  };\n\n  CVShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n  };\n\n  CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.push(transform);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.removeTransformFromStyleList = function () {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.pop();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.closeStyles = function (styles) {\n    var i;\n    var len = styles.length;\n\n    for (i = 0; i < len; i += 1) {\n      styles[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var processedPos;\n    var modifier;\n    var currentTransform;\n    var ownTransforms = [].concat(transforms);\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._shouldRender = shouldRender;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          currentTransform = this.createTransformElement(arr[i]);\n          itemsData[i] = currentTransform;\n        }\n\n        ownTransforms.push(itemsData[i]);\n        this.addTransformToStyleList(itemsData[i]);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i]);\n        }\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          shouldRender = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    this.removeTransformFromStyleList();\n    this.closeStyles(ownStyles);\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.renderInnerContent = function () {\n    this.transformHelper.opacity = 1;\n    this.transformHelper._opMdf = false;\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n    this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n  };\n\n  CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n    if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n      groupTransform.opacity = parentTransform.opacity;\n      groupTransform.opacity *= groupTransform.op.v;\n      groupTransform._opMdf = true;\n    }\n  };\n\n  CVShapeElement.prototype.drawLayer = function () {\n    var i;\n    var len = this.stylesList.length;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var elems;\n    var nodes;\n    var renderer = this.globalData.renderer;\n    var ctx = this.globalData.canvasContext;\n    var type;\n    var currentStyle;\n\n    for (i = 0; i < len; i += 1) {\n      currentStyle = this.stylesList[i];\n      type = currentStyle.type; // Skipping style when\n      // Stroke width equals 0\n      // style should not be rendered (extra unused repeaters)\n      // current opacity equals 0\n      // global opacity equals 0\n\n      if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n        renderer.save();\n        elems = currentStyle.elements;\n\n        if (type === 'st' || type === 'gs') {\n          renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n          renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n          renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n          renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n          renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n        } else {\n          renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // 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            renderer.ctxStroke();\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          this.globalData.renderer.ctxFill(currentStyle.r);\n        }\n\n        renderer.restore();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n    var i;\n    var len = items.length - 1;\n    var groupTransform;\n    groupTransform = parentTransform;\n\n    for (i = len; i >= 0; i -= 1) {\n      if (items[i].ty === 'tr') {\n        groupTransform = data[i].transform;\n        this.renderShapeTransform(parentTransform, groupTransform);\n      } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n        this.renderPath(items[i], data[i]);\n      } else if (items[i].ty === 'fl') {\n        this.renderFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'st') {\n        this.renderStroke(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n        this.renderGradientFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gr') {\n        this.renderShape(groupTransform, items[i].it, data[i].it);\n      } else if (items[i].ty === 'tm') {//\n      }\n    }\n\n    if (isMain) {\n      this.drawLayer();\n    }\n  };\n\n  CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n    if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n      var shapeNodes = styledShape.trNodes;\n      var paths = shape.paths;\n      var i;\n      var len;\n      var j;\n      var jLen = paths._length;\n      shapeNodes.length = 0;\n      var groupTransformMat = styledShape.transforms.finalTransform;\n\n      for (j = 0; j < jLen; j += 1) {\n        var pathNodes = paths.shapes[j];\n\n        if (pathNodes && pathNodes.v) {\n          len = pathNodes._length;\n\n          for (i = 1; i < len; i += 1) {\n            if (i === 1) {\n              shapeNodes.push({\n                t: 'm',\n                p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n              });\n            }\n\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n            });\n          }\n\n          if (len === 1) {\n            shapeNodes.push({\n              t: 'm',\n              p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n            });\n          }\n\n          if (pathNodes.c && len) {\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n            });\n            shapeNodes.push({\n              t: 'z'\n            });\n          }\n        }\n      }\n\n      styledShape.trNodes = shapeNodes;\n    }\n  };\n\n  CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n    if (pathData.hd !== true && pathData._shouldRender) {\n      var i;\n      var len = itemData.styledShapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n  };\n\n  CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var grd;\n\n    if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n      var ctx = this.globalData.canvasContext;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (styleData.t === 1) {\n        grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n      } else {\n        var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n        var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n        var percent = itemData.h.v;\n\n        if (percent >= 1) {\n          percent = 0.99;\n        } else if (percent <= -1) {\n          percent = -0.99;\n        }\n\n        var dist = rad * percent;\n        var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n        var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n        grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n      }\n\n      var i;\n      var len = styleData.g.p;\n      var cValues = itemData.g.c;\n      var opacity = 1;\n\n      for (i = 0; i < len; i += 1) {\n        if (itemData.g._hasOpacity && itemData.g._collapsable) {\n          opacity = itemData.g.o[i * 2 + 1];\n        }\n\n        grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n      }\n\n      styleElem.grd = grd;\n    }\n\n    styleElem.coOp = itemData.o.v * groupTransform.opacity;\n  };\n\n  CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var d = itemData.d;\n\n    if (d && (d._mdf || this._isFirstFrame)) {\n      styleElem.da = d.dashArray;\n      styleElem[\"do\"] = d.dashoffset[0];\n    }\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n\n    if (itemData.w._mdf || this._isFirstFrame) {\n      styleElem.wi = itemData.w.v;\n    }\n  };\n\n  CVShapeElement.prototype.destroy = function () {\n    this.shapesData = null;\n    this.globalData = null;\n    this.canvasContext = null;\n    this.stylesList.length = 0;\n    this.itemsData.length = 0;\n  };\n\n  function CVTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.yOffset = 0;\n    this.fillColorAnim = false;\n    this.strokeColorAnim = false;\n    this.strokeWidthAnim = false;\n    this.stroke = false;\n    this.fill = false;\n    this.justifyOffset = 0;\n    this.currentRender = null;\n    this.renderType = 'canvas';\n    this.values = {\n      fill: 'rgba(0,0,0,0)',\n      stroke: 'rgba(0,0,0,0)',\n      sWidth: 0,\n      fValue: ''\n    };\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n  CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n  CVTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var hasFill = false;\n\n    if (documentData.fc) {\n      hasFill = true;\n      this.values.fill = this.buildColor(documentData.fc);\n    } else {\n      this.values.fill = 'rgba(0,0,0,0)';\n    }\n\n    this.fill = hasFill;\n    var hasStroke = false;\n\n    if (documentData.sc) {\n      hasStroke = true;\n      this.values.stroke = this.buildColor(documentData.sc);\n      this.values.sWidth = documentData.sw;\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n    var i;\n    var len;\n    var letters = documentData.l;\n    var matrixHelper = this.mHelper;\n    this.stroke = hasStroke;\n    this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n    len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n    var charData;\n    var shapeData;\n    var k;\n    var kLen;\n    var shapes;\n    var j;\n    var jLen;\n    var pathNodes;\n    var commands;\n    var pathArr;\n    var singleShape = this.data.singleShape;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n      shapeData = charData && charData.data || {};\n      matrixHelper.reset();\n\n      if (singleShape && letters[i].n) {\n        xPos = -trackingOffset;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        firstLine = false;\n      }\n\n      shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n      jLen = shapes.length;\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n      if (singleShape) {\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n      }\n\n      commands = createSizedArray(jLen - 1);\n      var commandsCounter = 0;\n\n      for (j = 0; j < jLen; j += 1) {\n        if (shapes[j].ty === 'sh') {\n          kLen = shapes[j].ks.k.i.length;\n          pathNodes = shapes[j].ks.k;\n          pathArr = [];\n\n          for (k = 1; k < kLen; k += 1) {\n            if (k === 1) {\n              pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n            }\n\n            pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n          }\n\n          pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n          commands[commandsCounter] = pathArr;\n          commandsCounter += 1;\n        }\n      }\n\n      if (singleShape) {\n        xPos += letters[i].l;\n        xPos += trackingOffset;\n      }\n\n      if (this.textSpans[cnt]) {\n        this.textSpans[cnt].elem = commands;\n      } else {\n        this.textSpans[cnt] = {\n          elem: commands\n        };\n      }\n\n      cnt += 1;\n    }\n  };\n\n  CVTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var ctx = this.canvasContext;\n    ctx.font = this.values.fValue;\n    this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n    this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n    this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n    if (!this.data.singleShape) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n    }\n\n    var i;\n    var len;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var lastFill = null;\n    var lastStroke = null;\n    var lastStrokeW = null;\n    var commands;\n    var pathArr;\n    var renderer = this.globalData.renderer;\n\n    for (i = 0; i < len; i += 1) {\n      if (!letters[i].n) {\n        renderedLetter = renderedLetters[i];\n\n        if (renderedLetter) {\n          renderer.save();\n          renderer.ctxTransform(renderedLetter.p);\n          renderer.ctxOpacity(renderedLetter.o);\n        }\n\n        if (this.fill) {\n          if (renderedLetter && renderedLetter.fc) {\n            if (lastFill !== renderedLetter.fc) {\n              renderer.ctxFillStyle(renderedLetter.fc);\n              lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n            }\n          } else if (lastFill !== this.values.fill) {\n            lastFill = this.values.fill;\n            renderer.ctxFillStyle(this.values.fill); // 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          renderer.ctxFill(); // this.globalData.canvasContext.fill();\n          /// 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              renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n            }\n          } else if (lastStrokeW !== this.values.sWidth) {\n            lastStrokeW = this.values.sWidth;\n            renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n          }\n\n          if (renderedLetter && renderedLetter.sc) {\n            if (lastStroke !== renderedLetter.sc) {\n              lastStroke = renderedLetter.sc;\n              renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n            }\n          } else if (lastStroke !== this.values.stroke) {\n            lastStroke = this.values.stroke;\n            renderer.ctxStrokeStyle(this.values.stroke); // 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          renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n          /// ctx.strokeText(letters[i].val,0,0);\n        }\n\n        if (renderedLetter) {\n          this.globalData.renderer.restore();\n        }\n      }\n    }\n  };\n\n  function CVImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.img = globalData.imageLoader.getAsset(this.assetData);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n  CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVImageElement.prototype.createContent = function () {\n    if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n      var canvas = createTag('canvas');\n      canvas.width = this.assetData.w;\n      canvas.height = this.assetData.h;\n      var ctx = canvas.getContext('2d');\n      var imgW = this.img.width;\n      var imgH = this.img.height;\n      var imgRel = imgW / imgH;\n      var canvasRel = this.assetData.w / this.assetData.h;\n      var widthCrop;\n      var heightCrop;\n      var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n      if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n        heightCrop = imgH;\n        widthCrop = heightCrop * canvasRel;\n      } else {\n        widthCrop = imgW;\n        heightCrop = widthCrop / canvasRel;\n      }\n\n      ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n      this.img = canvas;\n    }\n  };\n\n  CVImageElement.prototype.renderInnerContent = function () {\n    this.canvasContext.drawImage(this.img, 0, 0);\n  };\n\n  CVImageElement.prototype.destroy = function () {\n    this.img = null;\n  };\n\n  function CVSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n  CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVSolidElement.prototype.renderInnerContent = function () {\n    // var ctx = this.canvasContext;\n    this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n    this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n    //\n  };\n\n  function CanvasRendererBase() {}\n\n  extendPrototype([BaseRenderer], CanvasRendererBase);\n\n  CanvasRendererBase.prototype.createShape = function (data) {\n    return new CVShapeElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createText = function (data) {\n    return new CVTextElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createImage = function (data) {\n    return new CVImageElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createSolid = function (data) {\n    return new CVSolidElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  CanvasRendererBase.prototype.ctxTransform = function (props) {\n    if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n      return;\n    }\n\n    this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n  };\n\n  CanvasRendererBase.prototype.ctxOpacity = function (op) {\n    this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n  };\n\n  CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n    this.canvasContext.fillStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n    this.canvasContext.strokeStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n    this.canvasContext.lineWidth = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineCap = function (value) {\n    this.canvasContext.lineCap = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n    this.canvasContext.lineJoin = value;\n  };\n\n  CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n    this.canvasContext.miterLimit = value;\n  };\n\n  CanvasRendererBase.prototype.ctxFill = function (rule) {\n    this.canvasContext.fill(rule);\n  };\n\n  CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n    this.canvasContext.fillRect(x, y, w, h);\n  };\n\n  CanvasRendererBase.prototype.ctxStroke = function () {\n    this.canvasContext.stroke();\n  };\n\n  CanvasRendererBase.prototype.reset = function () {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    this.contextData.reset();\n  };\n\n  CanvasRendererBase.prototype.save = function () {\n    this.canvasContext.save();\n  };\n\n  CanvasRendererBase.prototype.restore = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    if (actionFlag) {\n      this.globalData.blendMode = 'source-over';\n    }\n\n    this.contextData.restore(actionFlag);\n  };\n\n  CanvasRendererBase.prototype.configAnimation = function (animData) {\n    if (this.animationItem.wrapper) {\n      this.animationItem.container = createTag('canvas');\n      var containerStyle = this.animationItem.container.style;\n      containerStyle.width = '100%';\n      containerStyle.height = '100%';\n      var origin = '0px 0px 0px';\n      containerStyle.transformOrigin = origin;\n      containerStyle.mozTransformOrigin = origin;\n      containerStyle.webkitTransformOrigin = origin;\n      containerStyle['-webkit-transform'] = origin;\n      containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n      this.animationItem.wrapper.appendChild(this.animationItem.container);\n      this.canvasContext = this.animationItem.container.getContext('2d');\n\n      if (this.renderConfig.className) {\n        this.animationItem.container.setAttribute('class', this.renderConfig.className);\n      }\n\n      if (this.renderConfig.id) {\n        this.animationItem.container.setAttribute('id', this.renderConfig.id);\n      }\n    } else {\n      this.canvasContext = this.renderConfig.context;\n    }\n\n    this.contextData.setContext(this.canvasContext);\n    this.data = animData;\n    this.layers = animData.layers;\n    this.transformCanvas = {\n      w: animData.w,\n      h: animData.h,\n      sx: 0,\n      sy: 0,\n      tx: 0,\n      ty: 0\n    };\n    this.setupGlobalData(animData, document.body);\n    this.globalData.canvasContext = this.canvasContext;\n    this.globalData.renderer = this;\n    this.globalData.isDashed = false;\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.globalData.transformCanvas = this.transformCanvas;\n    this.elements = createSizedArray(animData.layers.length);\n    this.updateContainerSize();\n  };\n\n  CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n    this.reset();\n    var elementWidth;\n    var elementHeight;\n\n    if (width) {\n      elementWidth = width;\n      elementHeight = height;\n      this.canvasContext.canvas.width = elementWidth;\n      this.canvasContext.canvas.height = elementHeight;\n    } else {\n      if (this.animationItem.wrapper && this.animationItem.container) {\n        elementWidth = this.animationItem.wrapper.offsetWidth;\n        elementHeight = this.animationItem.wrapper.offsetHeight;\n      } else {\n        elementWidth = this.canvasContext.canvas.width;\n        elementHeight = this.canvasContext.canvas.height;\n      }\n\n      this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n      this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n    }\n\n    var elementRel;\n    var animationRel;\n\n    if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n      var par = this.renderConfig.preserveAspectRatio.split(' ');\n      var fillType = par[1] || 'meet';\n      var pos = par[0] || 'xMidYMid';\n      var xPos = pos.substr(0, 4);\n      var yPos = pos.substr(4);\n      elementRel = elementWidth / elementHeight;\n      animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n      if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n        this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      } else {\n        this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      }\n\n      if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n      } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.tx = 0;\n      }\n\n      if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n      } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.ty = 0;\n      }\n    } else if (this.renderConfig.preserveAspectRatio === 'none') {\n      this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    } else {\n      this.transformCanvas.sx = this.renderConfig.dpr;\n      this.transformCanvas.sy = this.renderConfig.dpr;\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    }\n\n    this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n    /* var i, len = this.elements.length;\r\n      for(i=0;i<len;i+=1){\r\n          if(this.elements[i] && this.elements[i].data.ty === 0){\r\n              this.elements[i].resize(this.globalData.transformCanvas);\r\n          }\r\n      } */\n\n    this.ctxTransform(this.transformCanvas.props);\n    this.canvasContext.beginPath();\n    this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n    this.canvasContext.closePath();\n    this.canvasContext.clip();\n    this.renderFrame(this.renderedFrame, true);\n  };\n\n  CanvasRendererBase.prototype.destroy = function () {\n    if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.globalData.canvasContext = null;\n    this.animationItem.container = null;\n    this.destroyed = true;\n  };\n\n  CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n    if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n      return;\n    }\n\n    this.renderedFrame = num;\n    this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n    this.globalData.frameId += 1;\n    this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n    this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n    // console.log('NEW: ',num);\n\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      if (this.renderConfig.clearCanvas === true) {\n        this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n      } else {\n        this.save();\n      }\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n\n      if (this.renderConfig.clearCanvas !== true) {\n        this.restore();\n      }\n    }\n  };\n\n  CanvasRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    var element = this.createItem(this.layers[pos], this, this.globalData);\n    elements[pos] = element;\n    element.initExpressions();\n    /* if(this.layers[pos].ty === 0){\r\n          element.resize(this.globalData.transformCanvas);\r\n      } */\n  };\n\n  CanvasRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  CanvasRendererBase.prototype.hide = function () {\n    this.animationItem.container.style.display = 'none';\n  };\n\n  CanvasRendererBase.prototype.show = function () {\n    this.animationItem.container.style.display = 'block';\n  };\n\n  function CanvasContext() {\n    this.opacity = -1;\n    this.transform = createTypedArray('float32', 16);\n    this.fillStyle = '';\n    this.strokeStyle = '';\n    this.lineWidth = '';\n    this.lineCap = '';\n    this.lineJoin = '';\n    this.miterLimit = '';\n    this.id = Math.random();\n  }\n\n  function CVContextData() {\n    this.stack = [];\n    this.cArrPos = 0;\n    this.cTr = new Matrix();\n    var i;\n    var len = 15;\n\n    for (i = 0; i < len; i += 1) {\n      var canvasContext = new CanvasContext();\n      this.stack[i] = canvasContext;\n    }\n\n    this._length = len;\n    this.nativeContext = null;\n    this.transformMat = new Matrix();\n    this.currentOpacity = 1; //\n\n    this.currentFillStyle = '';\n    this.appliedFillStyle = ''; //\n\n    this.currentStrokeStyle = '';\n    this.appliedStrokeStyle = ''; //\n\n    this.currentLineWidth = '';\n    this.appliedLineWidth = ''; //\n\n    this.currentLineCap = '';\n    this.appliedLineCap = ''; //\n\n    this.currentLineJoin = '';\n    this.appliedLineJoin = ''; //\n\n    this.appliedMiterLimit = '';\n    this.currentMiterLimit = '';\n  }\n\n  CVContextData.prototype.duplicate = function () {\n    var newLength = this._length * 2;\n    var i = 0;\n\n    for (i = this._length; i < newLength; i += 1) {\n      this.stack[i] = new CanvasContext();\n    }\n\n    this._length = newLength;\n  };\n\n  CVContextData.prototype.reset = function () {\n    this.cArrPos = 0;\n    this.cTr.reset();\n    this.stack[this.cArrPos].opacity = 1;\n  };\n\n  CVContextData.prototype.restore = function (forceRestore) {\n    this.cArrPos -= 1;\n    var currentContext = this.stack[this.cArrPos];\n    var transform = currentContext.transform;\n    var i;\n    var arr = this.cTr.props;\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = transform[i];\n    }\n\n    if (forceRestore) {\n      this.nativeContext.restore();\n      var prevStack = this.stack[this.cArrPos + 1];\n      this.appliedFillStyle = prevStack.fillStyle;\n      this.appliedStrokeStyle = prevStack.strokeStyle;\n      this.appliedLineWidth = prevStack.lineWidth;\n      this.appliedLineCap = prevStack.lineCap;\n      this.appliedLineJoin = prevStack.lineJoin;\n      this.appliedMiterLimit = prevStack.miterLimit;\n    }\n\n    this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n    if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n      this.nativeContext.globalAlpha = currentContext.opacity;\n      this.currentOpacity = currentContext.opacity;\n    }\n\n    this.currentFillStyle = currentContext.fillStyle;\n    this.currentStrokeStyle = currentContext.strokeStyle;\n    this.currentLineWidth = currentContext.lineWidth;\n    this.currentLineCap = currentContext.lineCap;\n    this.currentLineJoin = currentContext.lineJoin;\n    this.currentMiterLimit = currentContext.miterLimit;\n  };\n\n  CVContextData.prototype.save = function (saveOnNativeFlag) {\n    if (saveOnNativeFlag) {\n      this.nativeContext.save();\n    }\n\n    var props = this.cTr.props;\n\n    if (this._length <= this.cArrPos) {\n      this.duplicate();\n    }\n\n    var currentStack = this.stack[this.cArrPos];\n    var i;\n\n    for (i = 0; i < 16; i += 1) {\n      currentStack.transform[i] = props[i];\n    }\n\n    this.cArrPos += 1;\n    var newStack = this.stack[this.cArrPos];\n    newStack.opacity = currentStack.opacity;\n    newStack.fillStyle = currentStack.fillStyle;\n    newStack.strokeStyle = currentStack.strokeStyle;\n    newStack.lineWidth = currentStack.lineWidth;\n    newStack.lineCap = currentStack.lineCap;\n    newStack.lineJoin = currentStack.lineJoin;\n    newStack.miterLimit = currentStack.miterLimit;\n  };\n\n  CVContextData.prototype.setOpacity = function (value) {\n    this.stack[this.cArrPos].opacity = value;\n  };\n\n  CVContextData.prototype.setContext = function (value) {\n    this.nativeContext = value;\n  };\n\n  CVContextData.prototype.fillStyle = function (value) {\n    if (this.stack[this.cArrPos].fillStyle !== value) {\n      this.currentFillStyle = value;\n      this.stack[this.cArrPos].fillStyle = value;\n    }\n  };\n\n  CVContextData.prototype.strokeStyle = function (value) {\n    if (this.stack[this.cArrPos].strokeStyle !== value) {\n      this.currentStrokeStyle = value;\n      this.stack[this.cArrPos].strokeStyle = value;\n    }\n  };\n\n  CVContextData.prototype.lineWidth = function (value) {\n    if (this.stack[this.cArrPos].lineWidth !== value) {\n      this.currentLineWidth = value;\n      this.stack[this.cArrPos].lineWidth = value;\n    }\n  };\n\n  CVContextData.prototype.lineCap = function (value) {\n    if (this.stack[this.cArrPos].lineCap !== value) {\n      this.currentLineCap = value;\n      this.stack[this.cArrPos].lineCap = value;\n    }\n  };\n\n  CVContextData.prototype.lineJoin = function (value) {\n    if (this.stack[this.cArrPos].lineJoin !== value) {\n      this.currentLineJoin = value;\n      this.stack[this.cArrPos].lineJoin = value;\n    }\n  };\n\n  CVContextData.prototype.miterLimit = function (value) {\n    if (this.stack[this.cArrPos].miterLimit !== value) {\n      this.currentMiterLimit = value;\n      this.stack[this.cArrPos].miterLimit = value;\n    }\n  };\n\n  CVContextData.prototype.transform = function (props) {\n    this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n    var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n    this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n    currentTransform.cloneFromProps(this.transformMat.props);\n    var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n    this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n  };\n\n  CVContextData.prototype.opacity = function (op) {\n    var currentOpacity = this.stack[this.cArrPos].opacity;\n    currentOpacity *= op < 0 ? 0 : op;\n\n    if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n      if (this.currentOpacity !== op) {\n        this.nativeContext.globalAlpha = op;\n        this.currentOpacity = op;\n      }\n\n      this.stack[this.cArrPos].opacity = currentOpacity;\n    }\n  };\n\n  CVContextData.prototype.fill = function (rule) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fill(rule);\n  };\n\n  CVContextData.prototype.fillRect = function (x, y, w, h) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fillRect(x, y, w, h);\n  };\n\n  CVContextData.prototype.stroke = function () {\n    if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n      this.appliedStrokeStyle = this.currentStrokeStyle;\n      this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n    }\n\n    if (this.appliedLineWidth !== this.currentLineWidth) {\n      this.appliedLineWidth = this.currentLineWidth;\n      this.nativeContext.lineWidth = this.appliedLineWidth;\n    }\n\n    if (this.appliedLineCap !== this.currentLineCap) {\n      this.appliedLineCap = this.currentLineCap;\n      this.nativeContext.lineCap = this.appliedLineCap;\n    }\n\n    if (this.appliedLineJoin !== this.currentLineJoin) {\n      this.appliedLineJoin = this.currentLineJoin;\n      this.nativeContext.lineJoin = this.appliedLineJoin;\n    }\n\n    if (this.appliedMiterLimit !== this.currentMiterLimit) {\n      this.appliedMiterLimit = this.currentMiterLimit;\n      this.nativeContext.miterLimit = this.appliedMiterLimit;\n    }\n\n    this.nativeContext.stroke();\n  };\n\n  function CVCompElement(data, globalData, comp) {\n    this.completeLayers = false;\n    this.layers = data.layers;\n    this.pendingElements = [];\n    this.elements = createSizedArray(this.layers.length);\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n  CVCompElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(this.data.w, 0);\n    ctx.lineTo(this.data.w, this.data.h);\n    ctx.lineTo(0, this.data.h);\n    ctx.lineTo(0, 0);\n    ctx.clip();\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  CVCompElement.prototype.destroy = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.layers = null;\n    this.elements = null;\n  };\n\n  CVCompElement.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function CanvasRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || '',\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\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    if (this.renderConfig.clearCanvas) {\n      this.ctxTransform = this.contextData.transform.bind(this.contextData);\n      this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n      this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n      this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n      this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n      this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n      this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n      this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n      this.ctxFill = this.contextData.fill.bind(this.contextData);\n      this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n      this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n      this.save = this.contextData.save.bind(this.contextData);\n    }\n  }\n\n  extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n  CanvasRenderer.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function HBaseElement() {}\n\n  HBaseElement.prototype = {\n    checkBlendMode: function checkBlendMode() {},\n    initRendererElement: function initRendererElement() {\n      this.baseElement = createTag(this.data.tg || 'div');\n\n      if (this.data.hasMask) {\n        this.svgElement = createNS('svg');\n        this.layerElement = createNS('g');\n        this.maskedElement = this.layerElement;\n        this.svgElement.appendChild(this.layerElement);\n        this.baseElement.appendChild(this.svgElement);\n      } else {\n        this.layerElement = this.baseElement;\n      }\n\n      styleDiv(this.baseElement);\n    },\n    createContainerElements: function createContainerElements() {\n      this.renderableEffectsManager = new CVEffects(this);\n      this.transformedElement = this.baseElement;\n      this.maskedElement = this.layerElement;\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n      if (this.finalTransform._matMdf) {\n        var matrixValue = this.finalTransform.mat.toCSS();\n        transformedElementStyle.transform = matrixValue;\n        transformedElementStyle.webkitTransform = matrixValue;\n      }\n\n      if (this.finalTransform._opMdf) {\n        transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderFrame: function renderFrame() {\n      // If it is exported as hidden (data.hd === true) no need to render\n      // If it is not visible no need to render\n      if (this.data.hd || this.hidden) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderElement();\n      this.renderInnerContent();\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.layerElement = null;\n      this.transformedElement = null;\n\n      if (this.matteElement) {\n        this.matteElement = null;\n      }\n\n      if (this.maskManager) {\n        this.maskManager.destroy();\n        this.maskManager = null;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n    },\n    addEffects: function addEffects() {},\n    setMatte: function setMatte() {}\n  };\n  HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n  HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n  HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n  function HSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n  HSolidElement.prototype.createContent = function () {\n    var rect;\n\n    if (this.data.hasMask) {\n      rect = createNS('rect');\n      rect.setAttribute('width', this.data.sw);\n      rect.setAttribute('height', this.data.sh);\n      rect.setAttribute('fill', this.data.sc);\n      this.svgElement.setAttribute('width', this.data.sw);\n      this.svgElement.setAttribute('height', this.data.sh);\n    } else {\n      rect = createTag('div');\n      rect.style.width = this.data.sw + 'px';\n      rect.style.height = this.data.sh + 'px';\n      rect.style.backgroundColor = this.data.sc;\n    }\n\n    this.layerElement.appendChild(rect);\n  };\n\n  function HShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.shapesContainer = createNS('g');\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n  HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n  HShapeElement.prototype.createContent = function () {\n    var cont;\n    this.baseElement.style.fontSize = 0;\n\n    if (this.data.hasMask) {\n      this.layerElement.appendChild(this.shapesContainer);\n      cont = this.svgElement;\n    } else {\n      cont = createNS('svg');\n      var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n      cont.setAttribute('width', size.w);\n      cont.setAttribute('height', size.h);\n      cont.appendChild(this.shapesContainer);\n      this.layerElement.appendChild(cont);\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n    this.filterUniqueShapes();\n    this.shapeCont = cont;\n  };\n\n  HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n    var i;\n    var len = transformers.length;\n\n    for (i = 0; i < len; i += 1) {\n      point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n    }\n\n    return point;\n  };\n\n  HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n    var shape = item.sh.v;\n    var transformers = item.transformers;\n    var i;\n    var len = shape._length;\n    var vPoint;\n    var oPoint;\n    var nextIPoint;\n    var nextVPoint;\n\n    if (len <= 1) {\n      return;\n    }\n\n    for (i = 0; i < len - 1; i += 1) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n\n    if (shape.c) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n  };\n\n  HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n    this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n    var bounds = this.shapeBoundingBox;\n    boundingBox.x = bmMin(bounds.left, boundingBox.x);\n    boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n    boundingBox.y = bmMin(bounds.top, boundingBox.y);\n    boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n  };\n\n  HShapeElement.prototype.shapeBoundingBox = {\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0\n  };\n  HShapeElement.prototype.tempBoundingBox = {\n    x: 0,\n    xMax: 0,\n    y: 0,\n    yMax: 0,\n    width: 0,\n    height: 0\n  };\n\n  HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n    var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n    for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n      // eslint-disable-line no-plusplus\n      b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n      a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n      c = 3 * p1[i] - 3 * p0[i];\n      b |= 0; // eslint-disable-line no-bitwise\n\n      a |= 0; // eslint-disable-line no-bitwise\n\n      c |= 0; // eslint-disable-line no-bitwise\n\n      if (a === 0 && b === 0) {//\n      } else if (a === 0) {\n        t = -c / b;\n\n        if (t > 0 && t < 1) {\n          bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n        }\n      } else {\n        b2ac = b * b - 4 * c * a;\n\n        if (b2ac >= 0) {\n          t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n          if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n          t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n          if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n        }\n      }\n    }\n\n    this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n    this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n    this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n    this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n  };\n\n  HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n    return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n  };\n\n  HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n    var i;\n    var len = itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (itemsData[i] && itemsData[i].sh) {\n        this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n      } else if (itemsData[i] && itemsData[i].it) {\n        this.calculateBoundingBox(itemsData[i].it, boundingBox);\n      } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n        this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n      }\n    }\n  };\n\n  HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n    var width = 0;\n\n    if (widthProperty.keyframes) {\n      for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n        var kfw = widthProperty.keyframes[i].s;\n\n        if (kfw > width) {\n          width = kfw;\n        }\n      }\n\n      width *= widthProperty.mult;\n    } else {\n      width = widthProperty.v * widthProperty.mult;\n    }\n\n    boundingBox.x -= width;\n    boundingBox.xMax += width;\n    boundingBox.y -= width;\n    boundingBox.yMax += width;\n  };\n\n  HShapeElement.prototype.currentBoxContains = function (box) {\n    return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n  };\n\n  HShapeElement.prototype.renderInnerContent = function () {\n    this._renderShapeFrame();\n\n    if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n      var tempBoundingBox = this.tempBoundingBox;\n      var max = 999999;\n      tempBoundingBox.x = max;\n      tempBoundingBox.xMax = -max;\n      tempBoundingBox.y = max;\n      tempBoundingBox.yMax = -max;\n      this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n      tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n      tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n      if (this.currentBoxContains(tempBoundingBox)) {\n        return;\n      }\n\n      var changed = false;\n\n      if (this.currentBBox.w !== tempBoundingBox.width) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.shapeCont.setAttribute('width', tempBoundingBox.width);\n        changed = true;\n      }\n\n      if (this.currentBBox.h !== tempBoundingBox.height) {\n        this.currentBBox.h = tempBoundingBox.height;\n        this.shapeCont.setAttribute('height', tempBoundingBox.height);\n        changed = true;\n      }\n\n      if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.currentBBox.h = tempBoundingBox.height;\n        this.currentBBox.x = tempBoundingBox.x;\n        this.currentBBox.y = tempBoundingBox.y;\n        this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        var shapeStyle = this.shapeCont.style;\n        var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        shapeStyle.transform = shapeTransform;\n        shapeStyle.webkitTransform = shapeTransform;\n      }\n    }\n  };\n\n  function HTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.textPaths = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n    this.renderType = 'svg';\n    this.isMasked = false;\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n  HTextElement.prototype.createContent = function () {\n    this.isMasked = this.checkMasks();\n\n    if (this.isMasked) {\n      this.renderType = 'svg';\n      this.compW = this.comp.data.w;\n      this.compH = this.comp.data.h;\n      this.svgElement.setAttribute('width', this.compW);\n      this.svgElement.setAttribute('height', this.compH);\n      var g = createNS('g');\n      this.maskedElement.appendChild(g);\n      this.innerElem = g;\n    } else {\n      this.renderType = 'html';\n      this.innerElem = this.layerElement;\n    }\n\n    this.checkParenting();\n  };\n\n  HTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var innerElemStyle = this.innerElem.style;\n    var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n    innerElemStyle.fill = textColor;\n    innerElemStyle.color = textColor;\n\n    if (documentData.sc) {\n      innerElemStyle.stroke = this.buildColor(documentData.sc);\n      innerElemStyle.strokeWidth = documentData.sw + 'px';\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (!this.globalData.fontManager.chars) {\n      innerElemStyle.fontSize = documentData.finalSize + 'px';\n      innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n      if (fontData.fClass) {\n        this.innerElem.className = fontData.fClass;\n      } else {\n        innerElemStyle.fontFamily = fontData.fFamily;\n        var fWeight = documentData.fWeight;\n        var fStyle = documentData.fStyle;\n        innerElemStyle.fontStyle = fStyle;\n        innerElemStyle.fontWeight = fWeight;\n      }\n    }\n\n    var i;\n    var len;\n    var letters = documentData.l;\n    len = letters.length;\n    var tSpan;\n    var tParent;\n    var tCont;\n    var matrixHelper = this.mHelper;\n    var shapes;\n    var shapeStr = '';\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.globalData.fontManager.chars) {\n        if (!this.textPaths[cnt]) {\n          tSpan = createNS('path');\n          tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n          tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n          tSpan.setAttribute('stroke-miterlimit', '4');\n        } else {\n          tSpan = this.textPaths[cnt];\n        }\n\n        if (!this.isMasked) {\n          if (this.textSpans[cnt]) {\n            tParent = this.textSpans[cnt];\n            tCont = tParent.children[0];\n          } else {\n            tParent = createTag('div');\n            tParent.style.lineHeight = 0;\n            tCont = createNS('svg');\n            tCont.appendChild(tSpan);\n            styleDiv(tParent);\n          }\n        }\n      } else if (!this.isMasked) {\n        if (this.textSpans[cnt]) {\n          tParent = this.textSpans[cnt];\n          tSpan = this.textPaths[cnt];\n        } else {\n          tParent = createTag('span');\n          styleDiv(tParent);\n          tSpan = createTag('span');\n          styleDiv(tSpan);\n          tParent.appendChild(tSpan);\n        }\n      } else {\n        tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n      } // tSpan.setAttribute('visibility', 'hidden');\n\n\n      if (this.globalData.fontManager.chars) {\n        var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n        var shapeData;\n\n        if (charData) {\n          shapeData = charData.data;\n        } else {\n          shapeData = null;\n        }\n\n        matrixHelper.reset();\n\n        if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n          shapes = shapeData.shapes[0].it;\n          matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n          shapeStr = this.createPathShape(matrixHelper, shapes);\n          tSpan.setAttribute('d', shapeStr);\n        }\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent);\n\n          if (shapeData && shapeData.shapes) {\n            // document.body.appendChild is needed to get exact measure of shape\n            document.body.appendChild(tCont);\n            var boundingBox = tCont.getBBox();\n            tCont.setAttribute('width', boundingBox.width + 2);\n            tCont.setAttribute('height', boundingBox.height + 2);\n            tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n            var tContStyle = tCont.style;\n            var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n            tContStyle.transform = tContTranslation;\n            tContStyle.webkitTransform = tContTranslation;\n            letters[i].yOffset = boundingBox.y - 1;\n          } else {\n            tCont.setAttribute('width', 1);\n            tCont.setAttribute('height', 1);\n          }\n\n          tParent.appendChild(tCont);\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } else {\n        tSpan.textContent = letters[i].val;\n        tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent); //\n\n          var tStyle = tSpan.style;\n          var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n          tStyle.transform = tSpanTranslation;\n          tStyle.webkitTransform = tSpanTranslation;\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } //\n\n\n      if (!this.isMasked) {\n        this.textSpans[cnt] = tParent;\n      } else {\n        this.textSpans[cnt] = tSpan;\n      }\n\n      this.textSpans[cnt].style.display = 'block';\n      this.textPaths[cnt] = tSpan;\n      cnt += 1;\n    }\n\n    while (cnt < this.textSpans.length) {\n      this.textSpans[cnt].style.display = 'none';\n      cnt += 1;\n    }\n  };\n\n  HTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var svgStyle;\n\n    if (this.data.singleShape) {\n      if (!this._isFirstFrame && !this.lettersChangedFlag) {\n        return;\n      }\n\n      if (this.isMasked && this.finalTransform._matMdf) {\n        // Todo Benchmark if using this is better than getBBox\n        this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n        svgStyle = this.svgElement.style;\n        var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n        svgStyle.transform = translation;\n        svgStyle.webkitTransform = translation;\n      }\n    }\n\n    this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n    if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n      return;\n    }\n\n    var i;\n    var len;\n    var count = 0;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var textSpan;\n    var textPath;\n\n    for (i = 0; i < len; i += 1) {\n      if (letters[i].n) {\n        count += 1;\n      } else {\n        textSpan = this.textSpans[i];\n        textPath = this.textPaths[i];\n        renderedLetter = renderedLetters[count];\n        count += 1;\n\n        if (renderedLetter._mdf.m) {\n          if (!this.isMasked) {\n            textSpan.style.webkitTransform = renderedLetter.m;\n            textSpan.style.transform = renderedLetter.m;\n          } else {\n            textSpan.setAttribute('transform', renderedLetter.m);\n          }\n        } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n        textSpan.style.opacity = renderedLetter.o;\n\n        if (renderedLetter.sw && renderedLetter._mdf.sw) {\n          textPath.setAttribute('stroke-width', renderedLetter.sw);\n        }\n\n        if (renderedLetter.sc && renderedLetter._mdf.sc) {\n          textPath.setAttribute('stroke', renderedLetter.sc);\n        }\n\n        if (renderedLetter.fc && renderedLetter._mdf.fc) {\n          textPath.setAttribute('fill', renderedLetter.fc);\n          textPath.style.color = renderedLetter.fc;\n        }\n      }\n    }\n\n    if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n      var boundingBox = this.innerElem.getBBox();\n\n      if (this.currentBBox.w !== boundingBox.width) {\n        this.currentBBox.w = boundingBox.width;\n        this.svgElement.setAttribute('width', boundingBox.width);\n      }\n\n      if (this.currentBBox.h !== boundingBox.height) {\n        this.currentBBox.h = boundingBox.height;\n        this.svgElement.setAttribute('height', boundingBox.height);\n      }\n\n      var margin = 1;\n\n      if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n        this.currentBBox.w = boundingBox.width + margin * 2;\n        this.currentBBox.h = boundingBox.height + margin * 2;\n        this.currentBBox.x = boundingBox.x - margin;\n        this.currentBBox.y = boundingBox.y - margin;\n        this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        svgStyle = this.svgElement.style;\n        var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        svgStyle.transform = svgTransform;\n        svgStyle.webkitTransform = svgTransform;\n      }\n    }\n  };\n\n  function HCameraElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initHierarchy();\n    var getProp = PropertyFactory.getProp;\n    this.pe = getProp(this, data.pe, 0, 0, this);\n\n    if (data.ks.p.s) {\n      this.px = getProp(this, data.ks.p.x, 1, 0, this);\n      this.py = getProp(this, data.ks.p.y, 1, 0, this);\n      this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n    } else {\n      this.p = getProp(this, data.ks.p, 1, 0, this);\n    }\n\n    if (data.ks.a) {\n      this.a = getProp(this, data.ks.a, 1, 0, this);\n    }\n\n    if (data.ks.or.k.length && data.ks.or.k[0].to) {\n      var i;\n      var len = data.ks.or.k.length;\n\n      for (i = 0; i < len; i += 1) {\n        data.ks.or.k[i].to = null;\n        data.ks.or.k[i].ti = null;\n      }\n    }\n\n    this.or = getProp(this, data.ks.or, 1, degToRads, this);\n    this.or.sh = true;\n    this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n    this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n    this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n    this.mat = new Matrix();\n    this._prevMat = new Matrix();\n    this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n    this.finalTransform = {\n      mProp: this\n    };\n  }\n\n  extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n  HCameraElement.prototype.setup = function () {\n    var i;\n    var len = this.comp.threeDElements.length;\n    var comp;\n    var perspectiveStyle;\n    var containerStyle;\n\n    for (i = 0; i < len; i += 1) {\n      // [perspectiveElem,container]\n      comp = this.comp.threeDElements[i];\n\n      if (comp.type === '3d') {\n        perspectiveStyle = comp.perspectiveElem.style;\n        containerStyle = comp.container.style;\n        var perspective = this.pe.v + 'px';\n        var origin = '0px 0px 0px';\n        var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n        perspectiveStyle.perspective = perspective;\n        perspectiveStyle.webkitPerspective = perspective;\n        containerStyle.transformOrigin = origin;\n        containerStyle.mozTransformOrigin = origin;\n        containerStyle.webkitTransformOrigin = origin;\n        perspectiveStyle.transform = matrix;\n        perspectiveStyle.webkitTransform = matrix;\n      }\n    }\n  };\n\n  HCameraElement.prototype.createElements = function () {};\n\n  HCameraElement.prototype.hide = function () {};\n\n  HCameraElement.prototype.renderFrame = function () {\n    var _mdf = this._isFirstFrame;\n    var i;\n    var len;\n\n    if (this.hierarchy) {\n      len = this.hierarchy.length;\n\n      for (i = 0; i < len; i += 1) {\n        _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n      }\n    }\n\n    if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n      this.mat.reset();\n\n      if (this.hierarchy) {\n        len = this.hierarchy.length - 1;\n\n        for (i = len; i >= 0; i -= 1) {\n          var mTransf = this.hierarchy[i].finalTransform.mProp;\n          this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n          this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n          this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n          this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n          this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n        }\n      }\n\n      if (this.p) {\n        this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n      } else {\n        this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n      }\n\n      if (this.a) {\n        var diffVector;\n\n        if (this.p) {\n          diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n        } else {\n          diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n        }\n\n        var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n        var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n        var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n        var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n        var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n        this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n      }\n\n      this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n      this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n      this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n      this.mat.translate(0, 0, this.pe.v);\n      var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n      if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n        len = this.comp.threeDElements.length;\n        var comp;\n        var perspectiveStyle;\n        var containerStyle;\n\n        for (i = 0; i < len; i += 1) {\n          comp = this.comp.threeDElements[i];\n\n          if (comp.type === '3d') {\n            if (hasMatrixChanged) {\n              var matValue = this.mat.toCSS();\n              containerStyle = comp.container.style;\n              containerStyle.transform = matValue;\n              containerStyle.webkitTransform = matValue;\n            }\n\n            if (this.pe._mdf) {\n              perspectiveStyle = comp.perspectiveElem.style;\n              perspectiveStyle.perspective = this.pe.v + 'px';\n              perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n            }\n          }\n        }\n\n        this.mat.clone(this._prevMat);\n      }\n    }\n\n    this._isFirstFrame = false;\n  };\n\n  HCameraElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  HCameraElement.prototype.destroy = function () {};\n\n  HCameraElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  function HImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n  HImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    var img = new Image();\n\n    if (this.data.hasMask) {\n      this.imageElem = createNS('image');\n      this.imageElem.setAttribute('width', this.assetData.w + 'px');\n      this.imageElem.setAttribute('height', this.assetData.h + 'px');\n      this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n      this.layerElement.appendChild(this.imageElem);\n      this.baseElement.setAttribute('width', this.assetData.w);\n      this.baseElement.setAttribute('height', this.assetData.h);\n    } else {\n      this.layerElement.appendChild(img);\n    }\n\n    img.crossOrigin = 'anonymous';\n    img.src = assetPath;\n\n    if (this.data.ln) {\n      this.baseElement.setAttribute('id', this.data.ln);\n    }\n  };\n\n  function HybridRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([BaseRenderer], HybridRendererBase);\n  HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n  HybridRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newDOMElement = element.getBaseElement();\n\n    if (!newDOMElement) {\n      return;\n    }\n\n    var layer = this.layers[pos];\n\n    if (!layer.ddd || !this.supports3d) {\n      if (this.threeDElements) {\n        this.addTo3dContainer(newDOMElement, pos);\n      } else {\n        var i = 0;\n        var nextDOMElement;\n        var nextLayer;\n        var tmpDOMElement;\n\n        while (i < pos) {\n          if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n            nextLayer = this.elements[i];\n            tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n            nextDOMElement = tmpDOMElement || nextDOMElement;\n          }\n\n          i += 1;\n        }\n\n        if (nextDOMElement) {\n          if (!layer.ddd || !this.supports3d) {\n            this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n          }\n        } else if (!layer.ddd || !this.supports3d) {\n          this.layerElement.appendChild(newDOMElement);\n        }\n      }\n    } else {\n      this.addTo3dContainer(newDOMElement, pos);\n    }\n  };\n\n  HybridRendererBase.prototype.createShape = function (data) {\n    if (!this.supports3d) {\n      return new SVGShapeElement(data, this.globalData, this);\n    }\n\n    return new HShapeElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createText = function (data) {\n    if (!this.supports3d) {\n      return new SVGTextLottieElement(data, this.globalData, this);\n    }\n\n    return new HTextElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createCamera = function (data) {\n    this.camera = new HCameraElement(data, this.globalData, this);\n    return this.camera;\n  };\n\n  HybridRendererBase.prototype.createImage = function (data) {\n    if (!this.supports3d) {\n      return new IImageElement(data, this.globalData, this);\n    }\n\n    return new HImageElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createSolid = function (data) {\n    if (!this.supports3d) {\n      return new ISolidElement(data, this.globalData, this);\n    }\n\n    return new HSolidElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n        return this.threeDElements[i].perspectiveElem;\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n    var perspectiveElem = createTag('div');\n    var style;\n    var containerStyle;\n    styleDiv(perspectiveElem);\n    var container = createTag('div');\n    styleDiv(container);\n\n    if (type === '3d') {\n      style = perspectiveElem.style;\n      style.width = this.globalData.compSize.w + 'px';\n      style.height = this.globalData.compSize.h + 'px';\n      var center = '50% 50%';\n      style.webkitTransformOrigin = center;\n      style.mozTransformOrigin = center;\n      style.transformOrigin = center;\n      containerStyle = container.style;\n      var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n      containerStyle.transform = matrix;\n      containerStyle.webkitTransform = matrix;\n    }\n\n    perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n    var threeDContainerData = {\n      container: container,\n      perspectiveElem: perspectiveElem,\n      startPos: pos,\n      endPos: pos,\n      type: type\n    };\n    this.threeDElements.push(threeDContainerData);\n    return threeDContainerData;\n  };\n\n  HybridRendererBase.prototype.build3dContainers = function () {\n    var i;\n    var len = this.layers.length;\n    var lastThreeDContainerData;\n    var currentContainer = '';\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n        if (currentContainer !== '3d') {\n          currentContainer = '3d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      } else {\n        if (currentContainer !== '2d') {\n          currentContainer = '2d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      }\n    }\n\n    len = this.threeDElements.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n    }\n  };\n\n  HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (pos <= this.threeDElements[i].endPos) {\n        var j = this.threeDElements[i].startPos;\n        var nextElement;\n\n        while (j < pos) {\n          if (this.elements[j] && this.elements[j].getBaseElement) {\n            nextElement = this.elements[j].getBaseElement();\n          }\n\n          j += 1;\n        }\n\n        if (nextElement) {\n          this.threeDElements[i].container.insertBefore(elem, nextElement);\n        } else {\n          this.threeDElements[i].container.appendChild(elem);\n        }\n\n        break;\n      }\n\n      i += 1;\n    }\n  };\n\n  HybridRendererBase.prototype.configAnimation = function (animData) {\n    var resizerElem = createTag('div');\n    var wrapper = this.animationItem.wrapper;\n    var style = resizerElem.style;\n    style.width = animData.w + 'px';\n    style.height = animData.h + 'px';\n    this.resizerElem = resizerElem;\n    styleDiv(resizerElem);\n    style.transformStyle = 'flat';\n    style.mozTransformStyle = 'flat';\n    style.webkitTransformStyle = 'flat';\n\n    if (this.renderConfig.className) {\n      resizerElem.setAttribute('class', this.renderConfig.className);\n    }\n\n    wrapper.appendChild(resizerElem);\n    style.overflow = 'hidden';\n    var svg = createNS('svg');\n    svg.setAttribute('width', '1');\n    svg.setAttribute('height', '1');\n    styleDiv(svg);\n    this.resizerElem.appendChild(svg);\n    var defs = createNS('defs');\n    svg.appendChild(defs);\n    this.data = animData; // Mask animation\n\n    this.setupGlobalData(animData, svg);\n    this.globalData.defs = defs;\n    this.layers = animData.layers;\n    this.layerElement = this.resizerElem;\n    this.build3dContainers();\n    this.updateContainerSize();\n  };\n\n  HybridRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.animationItem.container = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  HybridRendererBase.prototype.updateContainerSize = function () {\n    var elementWidth = this.animationItem.wrapper.offsetWidth;\n    var elementHeight = this.animationItem.wrapper.offsetHeight;\n    var elementRel = elementWidth / elementHeight;\n    var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n    var sx;\n    var sy;\n    var tx;\n    var ty;\n\n    if (animationRel > elementRel) {\n      sx = elementWidth / this.globalData.compSize.w;\n      sy = elementWidth / this.globalData.compSize.w;\n      tx = 0;\n      ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n    } else {\n      sx = elementHeight / this.globalData.compSize.h;\n      sy = elementHeight / this.globalData.compSize.h;\n      tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n      ty = 0;\n    }\n\n    var style = this.resizerElem.style;\n    style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n    style.transform = style.webkitTransform;\n  };\n\n  HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n  HybridRendererBase.prototype.hide = function () {\n    this.resizerElem.style.display = 'none';\n  };\n\n  HybridRendererBase.prototype.show = function () {\n    this.resizerElem.style.display = 'block';\n  };\n\n  HybridRendererBase.prototype.initItems = function () {\n    this.buildAllItems();\n\n    if (this.camera) {\n      this.camera.setup();\n    } else {\n      var cWidth = this.globalData.compSize.w;\n      var cHeight = this.globalData.compSize.h;\n      var i;\n      var len = this.threeDElements.length;\n\n      for (i = 0; i < len; i += 1) {\n        var style = this.threeDElements[i].perspectiveElem.style;\n        style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n        style.perspective = style.webkitPerspective;\n      }\n    }\n  };\n\n  HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n    var floatingContainer = createTag('div');\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  function HCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = !data.hasMask;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n  HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n  HCompElement.prototype.createContainerElements = function () {\n    this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n    if (this.data.hasMask) {\n      this.svgElement.setAttribute('width', this.data.w);\n      this.svgElement.setAttribute('height', this.data.h);\n      this.transformedElement = this.baseElement;\n    } else {\n      this.transformedElement = this.layerElement;\n    }\n  };\n\n  HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n    var j = 0;\n    var nextElement;\n\n    while (j < pos) {\n      if (this.elements[j] && this.elements[j].getBaseElement) {\n        nextElement = this.elements[j].getBaseElement();\n      }\n\n      j += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(elem, nextElement);\n    } else {\n      this.layerElement.appendChild(elem);\n    }\n  };\n\n  HCompElement.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  function HybridRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      },\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([HybridRendererBase], HybridRenderer);\n\n  HybridRenderer.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  var CompExpressionInterface = function () {\n    return function (comp) {\n      function _thisLayerFunction(name) {\n        var i = 0;\n        var len = comp.layers.length;\n\n        while (i < len) {\n          if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n            return comp.elements[i].layerInterface;\n          }\n\n          i += 1;\n        }\n\n        return null; // return {active:false};\n      }\n\n      Object.defineProperty(_thisLayerFunction, '_name', {\n        value: comp.data.nm\n      });\n      _thisLayerFunction.layer = _thisLayerFunction;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n      _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n      _thisLayerFunction.displayStartTime = 0;\n      _thisLayerFunction.numLayers = comp.layers.length;\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n  /* eslint-disable */\n\n  /*\r\n   Copyright 2014 David Bau.\r\n\r\n   Permission is hereby granted, free of charge, to any person obtaining\r\n   a copy of this software and associated documentation files (the\r\n   \"Software\"), to deal in the Software without restriction, including\r\n   without limitation the rights to use, copy, modify, merge, publish,\r\n   distribute, sublicense, and/or sell copies of the Software, and to\r\n   permit persons to whom the Software is furnished to do so, subject to\r\n   the following conditions:\r\n\r\n   The above copyright notice and this permission notice shall be\r\n   included in all copies or substantial portions of the Software.\r\n\r\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n   */\n  function seedRandom(pool, math) {\n    //\n    // The following constants are related to IEEE 754 limits.\n    //\n    var global = this,\n        width = 256,\n        // each RC4 output is 0 <= x < 256\n    chunks = 6,\n        // at least six RC4 outputs for each double\n    digits = 52,\n        // there are 52 significant digits in a double\n    rngname = 'random',\n        // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n        significance = math.pow(2, digits),\n        overflow = significance * 2,\n        mask = width - 1,\n        nodecrypto; // node.js crypto module, initialized at the bottom.\n    //\n    // seedrandom()\n    // This is the seedrandom function described above.\n    //\n\n    function seedrandom(seed, options, callback) {\n      var key = [];\n      options = options === true ? {\n        entropy: true\n      } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n      var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n      var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n      // randomness in every bit of the mantissa of the IEEE 754 value.\n\n      var prng = function prng() {\n        var n = arc4.g(chunks),\n            // Start with a numerator n < 2 ^ 48\n        d = startdenom,\n            //   and denominator d = 2 ^ 48.\n        x = 0; //   and no 'extra last byte'.\n\n        while (n < significance) {\n          // Fill up all significant digits by\n          n = (n + x) * width; //   shifting numerator and\n\n          d *= width; //   denominator and generating a\n\n          x = arc4.g(1); //   new least-significant-byte.\n        }\n\n        while (n >= overflow) {\n          // To avoid rounding up, before adding\n          n /= 2; //   last byte, shift everything\n\n          d /= 2; //   right using integer math until\n\n          x >>>= 1; //   we have exactly the desired bits.\n        }\n\n        return (n + x) / d; // Form the number within [0, 1).\n      };\n\n      prng.int32 = function () {\n        return arc4.g(4) | 0;\n      };\n\n      prng.quick = function () {\n        return arc4.g(4) / 0x100000000;\n      };\n\n      prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n      mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n      return (options.pass || callback || function (prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) {\n            copy(state, arc4);\n          } // Only provide the .state method if requested via options.state.\n\n\n          prng.state = function () {\n            return copy(arc4, {});\n          };\n        } // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n        if (is_math_call) {\n          math[rngname] = prng;\n          return seed;\n        } // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n    }\n\n    math['seed' + rngname] = seedrandom; //\n    // ARC4\n    //\n    // An ARC4 implementation.  The constructor takes a key in the form of\n    // an array of at most (width) integers that should be 0 <= x < (width).\n    //\n    // The g(count) method returns a pseudorandom integer that concatenates\n    // the next (count) outputs from ARC4.  Its return value is a number x\n    // that is in the range 0 <= x < (width ^ count).\n    //\n\n    function ARC4(key) {\n      var t,\n          keylen = key.length,\n          me = this,\n          i = 0,\n          j = me.i = me.j = 0,\n          s = me.S = []; // The empty key [] is treated as [0].\n\n      if (!keylen) {\n        key = [keylen++];\n      } // Set up S using the standard key scheduling algorithm.\n\n\n      while (i < width) {\n        s[i] = i++;\n      }\n\n      for (i = 0; i < width; i++) {\n        s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n        s[j] = t;\n      } // The \"g\" method returns the next (count) outputs as one number.\n\n\n      me.g = function (count) {\n        // Using instance members instead of closure state nearly doubles speed.\n        var t,\n            r = 0,\n            i = me.i,\n            j = me.j,\n            s = me.S;\n\n        while (count--) {\n          t = s[i = mask & i + 1];\n          r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n        }\n\n        me.i = i;\n        me.j = j;\n        return r; // For robust unpredictability, the function call below automatically\n        // discards an initial batch of values.  This is called RC4-drop[256].\n        // See http://google.com/search?q=rsa+fluhrer+response&btnI\n      };\n    } //\n    // copy()\n    // Copies internal state of ARC4 to or from a plain object.\n    //\n\n\n    function copy(f, t) {\n      t.i = f.i;\n      t.j = f.j;\n      t.S = f.S.slice();\n      return t;\n    } //\n    // flatten()\n    // Converts an object tree to nested arrays of strings.\n    //\n\n\n    function flatten(obj, depth) {\n      var result = [],\n          typ = _typeof$2(obj),\n          prop;\n\n      if (depth && typ == 'object') {\n        for (prop in obj) {\n          try {\n            result.push(flatten(obj[prop], depth - 1));\n          } catch (e) {}\n        }\n      }\n\n      return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n    } //\n    // mixkey()\n    // Mixes a string seed into a key that is an array of integers, and\n    // returns a shortened string seed that is equivalent to the result key.\n    //\n\n\n    function mixkey(seed, key) {\n      var stringseed = seed + '',\n          smear,\n          j = 0;\n\n      while (j < stringseed.length) {\n        key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n      }\n\n      return tostring(key);\n    } //\n    // autoseed()\n    // Returns an object for autoseeding, using window.crypto and Node crypto\n    // module if available.\n    //\n\n\n    function autoseed() {\n      try {\n        if (nodecrypto) {\n          return tostring(nodecrypto.randomBytes(width));\n        }\n\n        var out = new Uint8Array(width);\n        (global.crypto || global.msCrypto).getRandomValues(out);\n        return tostring(out);\n      } catch (e) {\n        var browser = global.navigator,\n            plugins = browser && browser.plugins;\n        return [+new Date(), global, plugins, global.screen, tostring(pool)];\n      }\n    } //\n    // tostring()\n    // Converts an array of charcodes to a string\n    //\n\n\n    function tostring(a) {\n      return String.fromCharCode.apply(0, a);\n    } //\n    // When seedrandom.js is loaded, we immediately mix a few bits\n    // from the built-in RNG into the entropy pool.  Because we do\n    // not want to interfere with deterministic PRNG state later,\n    // seedrandom will not call math.random on its own again after\n    // initialization.\n    //\n\n\n    mixkey(math.random(), pool); //\n    // Nodejs and AMD support: export the implementation as a module using\n    // either convention.\n    //\n    // End anonymous scope, and pass initial values.\n  }\n\n  ;\n\n  function initialize$2(BMMath) {\n    seedRandom([], BMMath);\n  }\n\n  var propTypes = {\n    SHAPE: 'shape'\n  };\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n  var ExpressionManager = function () {\n    'use strict';\n\n    var ob = {};\n    var Math = BMMath;\n    var window = null;\n    var document = null;\n    var XMLHttpRequest = null;\n    var fetch = null;\n    var frames = null;\n    var _lottieGlobal = {};\n    initialize$2(BMMath);\n\n    function resetFrame() {\n      _lottieGlobal = {};\n    }\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' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n    }\n\n    function $bm_neg(a) {\n      var tOfA = _typeof$1(a);\n\n      if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n        return -a;\n      }\n\n      if ($bm_isInstanceOfArray(a)) {\n        var i;\n        var lenA = a.length;\n        var retArr = [];\n\n        for (i = 0; i < lenA; i += 1) {\n          retArr[i] = -a[i];\n        }\n\n        return retArr;\n      }\n\n      if (a.propType) {\n        return a.v;\n      }\n\n      return -a;\n    }\n\n    var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n    var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n    var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n    function sum(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n        return a + b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] += b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a + b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] + b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    var add = sum;\n\n    function sub(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        if (tOfA === 'string') {\n          a = parseInt(a, 10);\n        }\n\n        if (tOfB === 'string') {\n          b = parseInt(b, 10);\n        }\n\n        return a - b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] -= b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a - b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] - b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    function mul(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a * b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] * b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a * b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function div(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a / b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] / b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a / b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function mod(a, b) {\n      if (typeof a === 'string') {\n        a = parseInt(a, 10);\n      }\n\n      if (typeof b === 'string') {\n        b = parseInt(b, 10);\n      }\n\n      return a % b;\n    }\n\n    var $bm_sum = sum;\n    var $bm_sub = sub;\n    var $bm_mul = mul;\n    var $bm_div = div;\n    var $bm_mod = mod;\n\n    function clamp(num, min, max) {\n      if (min > max) {\n        var mm = max;\n        max = min;\n        min = mm;\n      }\n\n      return Math.min(Math.max(num, min), max);\n    }\n\n    function radiansToDegrees(val) {\n      return val / degToRads;\n    }\n\n    var radians_to_degrees = radiansToDegrees;\n\n    function degreesToRadians(val) {\n      return val * degToRads;\n    }\n\n    var degrees_to_radians = radiansToDegrees;\n    var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n    function length(arr1, arr2) {\n      if (typeof arr1 === 'number' || arr1 instanceof Number) {\n        arr2 = arr2 || 0;\n        return Math.abs(arr1 - arr2);\n      }\n\n      if (!arr2) {\n        arr2 = helperLengthArray;\n      }\n\n      var i;\n      var len = Math.min(arr1.length, arr2.length);\n      var addedLength = 0;\n\n      for (i = 0; i < len; i += 1) {\n        addedLength += Math.pow(arr2[i] - arr1[i], 2);\n      }\n\n      return Math.sqrt(addedLength);\n    }\n\n    function normalize(vec) {\n      return div(vec, length(vec));\n    }\n\n    function rgbToHsl(val) {\n      var r = val[0];\n      var g = val[1];\n      var b = val[2];\n      var max = Math.max(r, g, b);\n      var min = Math.min(r, g, b);\n      var h;\n      var s;\n      var l = (max + min) / 2;\n\n      if (max === min) {\n        h = 0; // achromatic\n\n        s = 0; // achromatic\n      } else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0);\n            break;\n\n          case g:\n            h = (b - r) / d + 2;\n            break;\n\n          case b:\n            h = (r - g) / d + 4;\n            break;\n\n          default:\n            break;\n        }\n\n        h /= 6;\n      }\n\n      return [h, s, l, val[3]];\n    }\n\n    function hue2rgb(p, q, t) {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n\n    function hslToRgb(val) {\n      var h = val[0];\n      var s = val[1];\n      var l = val[2];\n      var r;\n      var g;\n      var b;\n\n      if (s === 0) {\n        r = l; // achromatic\n\n        b = l; // achromatic\n\n        g = l; // achromatic\n      } else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1 / 3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1 / 3);\n      }\n\n      return [r, g, b, val[3]];\n    }\n\n    function linear(t, tMin, tMax, value1, value2) {\n      if (value1 === undefined || value2 === undefined) {\n        value1 = tMin;\n        value2 = tMax;\n        tMin = 0;\n        tMax = 1;\n      }\n\n      if (tMax < tMin) {\n        var _tMin = tMax;\n        tMax = tMin;\n        tMin = _tMin;\n      }\n\n      if (t <= tMin) {\n        return value1;\n      }\n\n      if (t >= tMax) {\n        return value2;\n      }\n\n      var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n      if (!value1.length) {\n        return value1 + (value2 - value1) * perc;\n      }\n\n      var i;\n      var len = value1.length;\n      var arr = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n      }\n\n      return arr;\n    }\n\n    function random(min, max) {\n      if (max === undefined) {\n        if (min === undefined) {\n          min = 0;\n          max = 1;\n        } else {\n          max = min;\n          min = undefined;\n        }\n      }\n\n      if (max.length) {\n        var i;\n        var len = max.length;\n\n        if (!min) {\n          min = createTypedArray('float32', len);\n        }\n\n        var arr = createTypedArray('float32', len);\n        var rnd = BMMath.random();\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = min[i] + rnd * (max[i] - min[i]);\n        }\n\n        return arr;\n      }\n\n      if (min === undefined) {\n        min = 0;\n      }\n\n      var rndm = BMMath.random();\n      return min + rndm * (max - min);\n    }\n\n    function createPath(points, inTangents, outTangents, closed) {\n      var i;\n      var len = points.length;\n      var path = shapePool.newElement();\n      path.setPathData(!!closed, len);\n      var arrPlaceholder = [0, 0];\n      var inVertexPoint;\n      var outVertexPoint;\n\n      for (i = 0; i < len; i += 1) {\n        inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n        outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n        path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n      }\n\n      return path;\n    }\n\n    function initiateExpression(elem, data, property) {\n      // Bail out if we don't want expressions\n      function noOp(_value) {\n        return _value;\n      }\n\n      if (!elem.globalData.renderConfig.runExpressions) {\n        return noOp;\n      }\n\n      var val = data.x;\n      var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n      var _needsRandom = val.indexOf('random') !== -1;\n\n      var elemType = elem.data.ty;\n      var transform;\n      var $bm_transform;\n      var content;\n      var effect;\n      var thisProperty = property;\n      thisProperty.valueAtTime = thisProperty.getValueAtTime;\n      Object.defineProperty(thisProperty, 'value', {\n        get: function get() {\n          return thisProperty.v;\n        }\n      });\n      elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n      elem.comp.displayStartTime = 0;\n      var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      var width = elem.data.sw ? elem.data.sw : 0;\n      var height = elem.data.sh ? elem.data.sh : 0;\n      var name = elem.data.nm;\n      var loopIn;\n      var loop_in;\n      var loopOut;\n      var loop_out;\n      var smooth;\n      var toWorld;\n      var fromWorld;\n      var fromComp;\n      var toComp;\n      var fromCompToSurface;\n      var position;\n      var rotation;\n      var anchorPoint;\n      var scale;\n      var thisLayer;\n      var thisComp;\n      var mask;\n      var valueAtTime;\n      var velocityAtTime;\n      var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n      var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n      var numKeys = property.kf ? data.k.length : 0;\n      var active = !this.data || this.data.hd !== true;\n\n      var wiggle = function wiggle(freq, amp) {\n        var iWiggle;\n        var j;\n        var lenWiggle = this.pv.length ? this.pv.length : 1;\n        var addedAmps = createTypedArray('float32', lenWiggle);\n        freq = 5;\n        var iterations = Math.floor(time * freq);\n        iWiggle = 0;\n        j = 0;\n\n        while (iWiggle < iterations) {\n          // var rnd = BMMath.random();\n          for (j = 0; j < lenWiggle; j += 1) {\n            addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n          }\n\n          iWiggle += 1;\n        } // var rnd2 = BMMath.random();\n\n\n        var periods = time * freq;\n        var perc = periods - Math.floor(periods);\n        var arr = createTypedArray('float32', lenWiggle);\n\n        if (lenWiggle > 1) {\n          for (j = 0; j < lenWiggle; j += 1) {\n            arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n            // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n          }\n\n          return arr;\n        }\n\n        return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n      }.bind(this);\n\n      if (thisProperty.loopIn) {\n        loopIn = thisProperty.loopIn.bind(thisProperty);\n        loop_in = loopIn;\n      }\n\n      if (thisProperty.loopOut) {\n        loopOut = thisProperty.loopOut.bind(thisProperty);\n        loop_out = loopOut;\n      }\n\n      if (thisProperty.smooth) {\n        smooth = thisProperty.smooth.bind(thisProperty);\n      }\n\n      function loopInDuration(type, duration) {\n        return loopIn(type, duration, true);\n      }\n\n      function loopOutDuration(type, duration) {\n        return loopOut(type, duration, true);\n      }\n\n      if (this.getValueAtTime) {\n        valueAtTime = this.getValueAtTime.bind(this);\n      }\n\n      if (this.getVelocityAtTime) {\n        velocityAtTime = this.getVelocityAtTime.bind(this);\n      }\n\n      var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n      function lookAt(elem1, elem2) {\n        var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n        var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n        var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n        return [yaw, pitch, 0];\n      }\n\n      function easeOut(t, tMin, tMax, val1, val2) {\n        return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function easeIn(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n      }\n\n      function ease(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function applyEase(fn, t, tMin, tMax, val1, val2) {\n        if (val1 === undefined) {\n          val1 = tMin;\n          val2 = tMax;\n        } else {\n          t = (t - tMin) / (tMax - tMin);\n        }\n\n        if (t > 1) {\n          t = 1;\n        } else if (t < 0) {\n          t = 0;\n        }\n\n        var mult = fn(t);\n\n        if ($bm_isInstanceOfArray(val1)) {\n          var iKey;\n          var lenKey = val1.length;\n          var arr = createTypedArray('float32', lenKey);\n\n          for (iKey = 0; iKey < lenKey; iKey += 1) {\n            arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n          }\n\n          return arr;\n        }\n\n        return (val2 - val1) * mult + val1;\n      }\n\n      function nearestKey(time) {\n        var iKey;\n        var lenKey = data.k.length;\n        var index;\n        var keyTime;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          index = 0;\n          keyTime = 0;\n        } else {\n          index = -1;\n          time *= elem.comp.globalData.frameRate;\n\n          if (time < data.k[0].t) {\n            index = 1;\n            keyTime = data.k[0].t;\n          } else {\n            for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n              if (time === data.k[iKey].t) {\n                index = iKey + 1;\n                keyTime = data.k[iKey].t;\n                break;\n              } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n                if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n                  index = iKey + 2;\n                  keyTime = data.k[iKey + 1].t;\n                } else {\n                  index = iKey + 1;\n                  keyTime = data.k[iKey].t;\n                }\n\n                break;\n              }\n            }\n\n            if (index === -1) {\n              index = iKey + 1;\n              keyTime = data.k[iKey].t;\n            }\n          }\n        }\n\n        var obKey = {};\n        obKey.index = index;\n        obKey.time = keyTime / elem.comp.globalData.frameRate;\n        return obKey;\n      }\n\n      function key(ind) {\n        var obKey;\n        var iKey;\n        var lenKey;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          throw new Error('The property has no keyframe at index ' + ind);\n        }\n\n        ind -= 1;\n        obKey = {\n          time: data.k[ind].t / elem.comp.globalData.frameRate,\n          value: []\n        };\n        var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n        lenKey = arr.length;\n\n        for (iKey = 0; iKey < lenKey; iKey += 1) {\n          obKey[iKey] = arr[iKey];\n          obKey.value[iKey] = arr[iKey];\n        }\n\n        return obKey;\n      }\n\n      function framesToTime(fr, fps) {\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return fr / fps;\n      }\n\n      function timeToFrames(t, fps) {\n        if (!t && t !== 0) {\n          t = time;\n        }\n\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return t * fps;\n      }\n\n      function seedRandom(seed) {\n        BMMath.seedrandom(randSeed + seed);\n      }\n\n      function sourceRectAtTime() {\n        return elem.sourceRectAtTime();\n      }\n\n      function substring(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substring(init);\n          }\n\n          return value.substring(init, end);\n        }\n\n        return '';\n      }\n\n      function substr(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substr(init);\n          }\n\n          return value.substr(init, end);\n        }\n\n        return '';\n      }\n\n      function posterizeTime(framesPerSecond) {\n        time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n        value = valueAtTime(time);\n      }\n\n      var time;\n      var velocity;\n      var value;\n      var text;\n      var textIndex;\n      var textTotal;\n      var selectorValue;\n      var index = elem.data.ind;\n      var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n      var parent;\n      var randSeed = Math.floor(Math.random() * 1000000);\n      var globalData = elem.globalData;\n\n      function executeExpression(_value) {\n        // globalData.pushExpression();\n        value = _value;\n\n        if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n          return value;\n        }\n\n        if (this.propType === 'textSelector') {\n          textIndex = this.textIndex;\n          textTotal = this.textTotal;\n          selectorValue = this.selectorValue;\n        }\n\n        if (!thisLayer) {\n          text = elem.layerInterface.text;\n          thisLayer = elem.layerInterface;\n          thisComp = elem.comp.compInterface;\n          toWorld = thisLayer.toWorld.bind(thisLayer);\n          fromWorld = thisLayer.fromWorld.bind(thisLayer);\n          fromComp = thisLayer.fromComp.bind(thisLayer);\n          toComp = thisLayer.toComp.bind(thisLayer);\n          mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n          fromCompToSurface = fromComp;\n        }\n\n        if (!transform) {\n          transform = elem.layerInterface('ADBE Transform Group');\n          $bm_transform = transform;\n\n          if (transform) {\n            anchorPoint = transform.anchorPoint;\n            /* position = transform.position;\r\n                      rotation = transform.rotation;\r\n                      scale = transform.scale; */\n          }\n        }\n\n        if (elemType === 4 && !content) {\n          content = thisLayer('ADBE Root Vectors Group');\n        }\n\n        if (!effect) {\n          effect = thisLayer(4);\n        }\n\n        hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n        if (hasParent && !parent) {\n          parent = elem.hierarchy[0].layerInterface;\n        }\n\n        time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n        if (_needsRandom) {\n          seedRandom(randSeed + time);\n        }\n\n        if (needsVelocity) {\n          velocity = velocityAtTime(time);\n        }\n\n        expression_function();\n        this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n        // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n        scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n        return scoped_bm_rt;\n      } // Bundlers will see these as dead code and unless we reference them\n\n\n      executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n      return executeExpression;\n    }\n\n    ob.initiateExpression = initiateExpression;\n    ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n    ob.resetFrame = resetFrame;\n    return ob;\n  }();\n\n  var Expressions = function () {\n    var ob = {};\n    ob.initExpressions = initExpressions;\n    ob.resetFrame = ExpressionManager.resetFrame;\n\n    function initExpressions(animation) {\n      var stackCount = 0;\n      var registers = [];\n\n      function pushExpression() {\n        stackCount += 1;\n      }\n\n      function popExpression() {\n        stackCount -= 1;\n\n        if (stackCount === 0) {\n          releaseInstances();\n        }\n      }\n\n      function registerExpressionProperty(expression) {\n        if (registers.indexOf(expression) === -1) {\n          registers.push(expression);\n        }\n      }\n\n      function releaseInstances() {\n        var i;\n        var len = registers.length;\n\n        for (i = 0; i < len; i += 1) {\n          registers[i].release();\n        }\n\n        registers.length = 0;\n      }\n\n      animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n      animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n      animation.renderer.globalData.pushExpression = pushExpression;\n      animation.renderer.globalData.popExpression = popExpression;\n      animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n    }\n\n    return ob;\n  }();\n\n  var MaskManagerInterface = function () {\n    function MaskInterface(mask, data) {\n      this._mask = mask;\n      this._data = data;\n    }\n\n    Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n      get: function get() {\n        if (this._mask.prop.k) {\n          this._mask.prop.getValue();\n        }\n\n        return this._mask.prop;\n      }\n    });\n    Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n      get: function get() {\n        if (this._mask.op.k) {\n          this._mask.op.getValue();\n        }\n\n        return this._mask.op.v * 100;\n      }\n    });\n\n    var MaskManager = function MaskManager(maskManager) {\n      var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n      var i;\n      var len = maskManager.viewData.length;\n\n      for (i = 0; i < len; i += 1) {\n        _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n      }\n\n      var maskFunction = function maskFunction(name) {\n        i = 0;\n\n        while (i < len) {\n          if (maskManager.masksProperties[i].nm === name) {\n            return _masksInterfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      };\n\n      return maskFunction;\n    };\n\n    return MaskManager;\n  }();\n\n  var ExpressionPropertyInterface = function () {\n    var defaultUnidimensionalValue = {\n      pv: 0,\n      v: 0,\n      mult: 1\n    };\n    var defaultMultidimensionalValue = {\n      pv: [0, 0, 0],\n      v: [0, 0, 0],\n      mult: 1\n    };\n\n    function completeProperty(expressionValue, property, type) {\n      Object.defineProperty(expressionValue, 'velocity', {\n        get: function get() {\n          return property.getVelocityAtTime(property.comp.currentFrame);\n        }\n      });\n      expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n      expressionValue.key = function (pos) {\n        if (!expressionValue.numKeys) {\n          return 0;\n        }\n\n        var value = '';\n\n        if ('s' in property.keyframes[pos - 1]) {\n          value = property.keyframes[pos - 1].s;\n        } else if ('e' in property.keyframes[pos - 2]) {\n          value = property.keyframes[pos - 2].e;\n        } else {\n          value = property.keyframes[pos - 2].s;\n        }\n\n        var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n        valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n        valueProp.value = type === 'unidimensional' ? value[0] : value;\n        return valueProp;\n      };\n\n      expressionValue.valueAtTime = property.getValueAtTime;\n      expressionValue.speedAtTime = property.getSpeedAtTime;\n      expressionValue.velocityAtTime = property.getVelocityAtTime;\n      expressionValue.propertyGroup = property.propertyGroup;\n    }\n\n    function UnidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultUnidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var val = property.pv * mult;\n      var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n      expressionValue.value = val;\n      completeProperty(expressionValue, property, 'unidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        val = property.v * mult;\n\n        if (expressionValue.value !== val) {\n          expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n          expressionValue.value = val;\n          completeProperty(expressionValue, property, 'unidimensional');\n        }\n\n        return expressionValue;\n      };\n    }\n\n    function MultidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultMultidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var len = property.data && property.data.l || property.pv.length;\n      var expressionValue = createTypedArray('float32', len);\n      var arrValue = createTypedArray('float32', len);\n      expressionValue.value = arrValue;\n      completeProperty(expressionValue, property, 'multidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        for (var i = 0; i < len; i += 1) {\n          arrValue[i] = property.v[i] * mult;\n          expressionValue[i] = arrValue[i];\n        }\n\n        return expressionValue;\n      };\n    } // TODO: try to avoid using this getter\n\n\n    function defaultGetter() {\n      return defaultUnidimensionalValue;\n    }\n\n    return function (property) {\n      if (!property) {\n        return defaultGetter;\n      }\n\n      if (property.propType === 'unidimensional') {\n        return UnidimensionalPropertyInterface(property);\n      }\n\n      return MultidimensionalPropertyInterface(property);\n    };\n  }();\n\n  var TransformExpressionInterface = function () {\n    return function (transform) {\n      function _thisFunction(name) {\n        switch (name) {\n          case 'scale':\n          case 'Scale':\n          case 'ADBE Scale':\n          case 6:\n            return _thisFunction.scale;\n\n          case 'rotation':\n          case 'Rotation':\n          case 'ADBE Rotation':\n          case 'ADBE Rotate Z':\n          case 10:\n            return _thisFunction.rotation;\n\n          case 'ADBE Rotate X':\n            return _thisFunction.xRotation;\n\n          case 'ADBE Rotate Y':\n            return _thisFunction.yRotation;\n\n          case 'position':\n          case 'Position':\n          case 'ADBE Position':\n          case 2:\n            return _thisFunction.position;\n\n          case 'ADBE Position_0':\n            return _thisFunction.xPosition;\n\n          case 'ADBE Position_1':\n            return _thisFunction.yPosition;\n\n          case 'ADBE Position_2':\n            return _thisFunction.zPosition;\n\n          case 'anchorPoint':\n          case 'AnchorPoint':\n          case 'Anchor Point':\n          case 'ADBE AnchorPoint':\n          case 1:\n            return _thisFunction.anchorPoint;\n\n          case 'opacity':\n          case 'Opacity':\n          case 11:\n            return _thisFunction.opacity;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'rotation', {\n        get: ExpressionPropertyInterface(transform.r || transform.rz)\n      });\n      Object.defineProperty(_thisFunction, 'zRotation', {\n        get: ExpressionPropertyInterface(transform.rz || transform.r)\n      });\n      Object.defineProperty(_thisFunction, 'xRotation', {\n        get: ExpressionPropertyInterface(transform.rx)\n      });\n      Object.defineProperty(_thisFunction, 'yRotation', {\n        get: ExpressionPropertyInterface(transform.ry)\n      });\n      Object.defineProperty(_thisFunction, 'scale', {\n        get: ExpressionPropertyInterface(transform.s)\n      });\n\n      var _px;\n\n      var _py;\n\n      var _pz;\n\n      var _transformFactory;\n\n      if (transform.p) {\n        _transformFactory = ExpressionPropertyInterface(transform.p);\n      } else {\n        _px = ExpressionPropertyInterface(transform.px);\n        _py = ExpressionPropertyInterface(transform.py);\n\n        if (transform.pz) {\n          _pz = ExpressionPropertyInterface(transform.pz);\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'position', {\n        get: function get() {\n          if (transform.p) {\n            return _transformFactory();\n          }\n\n          return [_px(), _py(), _pz ? _pz() : 0];\n        }\n      });\n      Object.defineProperty(_thisFunction, 'xPosition', {\n        get: ExpressionPropertyInterface(transform.px)\n      });\n      Object.defineProperty(_thisFunction, 'yPosition', {\n        get: ExpressionPropertyInterface(transform.py)\n      });\n      Object.defineProperty(_thisFunction, 'zPosition', {\n        get: ExpressionPropertyInterface(transform.pz)\n      });\n      Object.defineProperty(_thisFunction, 'anchorPoint', {\n        get: ExpressionPropertyInterface(transform.a)\n      });\n      Object.defineProperty(_thisFunction, 'opacity', {\n        get: ExpressionPropertyInterface(transform.o)\n      });\n      Object.defineProperty(_thisFunction, 'skew', {\n        get: ExpressionPropertyInterface(transform.sk)\n      });\n      Object.defineProperty(_thisFunction, 'skewAxis', {\n        get: ExpressionPropertyInterface(transform.sa)\n      });\n      Object.defineProperty(_thisFunction, 'orientation', {\n        get: ExpressionPropertyInterface(transform.or)\n      });\n      return _thisFunction;\n    };\n  }();\n\n  var LayerExpressionInterface = function () {\n    function getMatrix(time) {\n      var toWorldMat = new Matrix();\n\n      if (time !== undefined) {\n        var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n        propMatrix.clone(toWorldMat);\n      } else {\n        var transformMat = this._elem.finalTransform.mProp;\n        transformMat.applyToMatrix(toWorldMat);\n      }\n\n      return toWorldMat;\n    }\n\n    function toWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function toWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function fromWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function fromWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function applyPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n    }\n\n    function invertPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.inversePoint(arr);\n    }\n\n    function fromComp(arr) {\n      var toWorldMat = new Matrix();\n      toWorldMat.reset();\n\n      this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n        }\n\n        return toWorldMat.inversePoint(arr);\n      }\n\n      return toWorldMat.inversePoint(arr);\n    }\n\n    function sampleImage() {\n      return [1, 1, 1, 1];\n    }\n\n    return function (elem) {\n      var transformInterface;\n\n      function _registerMaskInterface(maskManager) {\n        _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n      }\n\n      function _registerEffectsInterface(effects) {\n        _thisLayerFunction.effect = effects;\n      }\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Root Vectors Group':\n          case 'Contents':\n          case 2:\n            return _thisLayerFunction.shapeInterface;\n\n          case 1:\n          case 6:\n          case 'Transform':\n          case 'transform':\n          case 'ADBE Transform Group':\n            return transformInterface;\n\n          case 4:\n          case 'ADBE Effect Parade':\n          case 'effects':\n          case 'Effects':\n            return _thisLayerFunction.effect;\n\n          case 'ADBE Text Properties':\n            return _thisLayerFunction.textInterface;\n\n          default:\n            return null;\n        }\n      }\n\n      _thisLayerFunction.getMatrix = getMatrix;\n      _thisLayerFunction.invertPoint = invertPoint;\n      _thisLayerFunction.applyPoint = applyPoint;\n      _thisLayerFunction.toWorld = toWorld;\n      _thisLayerFunction.toWorldVec = toWorldVec;\n      _thisLayerFunction.fromWorld = fromWorld;\n      _thisLayerFunction.fromWorldVec = fromWorldVec;\n      _thisLayerFunction.toComp = toWorld;\n      _thisLayerFunction.fromComp = fromComp;\n      _thisLayerFunction.sampleImage = sampleImage;\n      _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n      _thisLayerFunction._elem = elem;\n      transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n      var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n      Object.defineProperties(_thisLayerFunction, {\n        hasParent: {\n          get: function get() {\n            return elem.hierarchy.length;\n          }\n        },\n        parent: {\n          get: function get() {\n            return elem.hierarchy[0].layerInterface;\n          }\n        },\n        rotation: getDescriptor(transformInterface, 'rotation'),\n        scale: getDescriptor(transformInterface, 'scale'),\n        position: getDescriptor(transformInterface, 'position'),\n        opacity: getDescriptor(transformInterface, 'opacity'),\n        anchorPoint: anchorPointDescriptor,\n        anchor_point: anchorPointDescriptor,\n        transform: {\n          get: function get() {\n            return transformInterface;\n          }\n        },\n        active: {\n          get: function get() {\n            return elem.isInRange;\n          }\n        }\n      });\n      _thisLayerFunction.startTime = elem.data.st;\n      _thisLayerFunction.index = elem.data.ind;\n      _thisLayerFunction.source = elem.data.refId;\n      _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n      _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n      _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      _thisLayerFunction._name = elem.data.nm;\n      _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n      _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var propertyGroupFactory = function () {\n    return function (interfaceFunction, parentPropertyGroup) {\n      return function (val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return parentPropertyGroup(val - 1);\n      };\n    };\n  }();\n\n  var PropertyInterface = function () {\n    return function (propertyName, propertyGroup) {\n      var interfaceFunction = {\n        _name: propertyName\n      };\n\n      function _propertyGroup(val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return propertyGroup(val - 1);\n      }\n\n      return _propertyGroup;\n    };\n  }();\n\n  var EffectsExpressionInterface = function () {\n    var ob = {\n      createEffectsInterface: createEffectsInterface\n    };\n\n    function createEffectsInterface(elem, propertyGroup) {\n      if (elem.effectsManager) {\n        var effectElements = [];\n        var effectsData = elem.data.ef;\n        var i;\n        var len = elem.effectsManager.effectElements.length;\n\n        for (i = 0; i < len; i += 1) {\n          effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n        }\n\n        var effects = elem.data.ef || [];\n\n        var groupInterface = function groupInterface(name) {\n          i = 0;\n          len = effects.length;\n\n          while (i < len) {\n            if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n              return effectElements[i];\n            }\n\n            i += 1;\n          }\n\n          return null;\n        };\n\n        Object.defineProperty(groupInterface, 'numProperties', {\n          get: function get() {\n            return effects.length;\n          }\n        });\n        return groupInterface;\n      }\n\n      return null;\n    }\n\n    function createGroupInterface(data, elements, propertyGroup, elem) {\n      function groupInterface(name) {\n        var effects = data.ef;\n        var i = 0;\n        var len = effects.length;\n\n        while (i < len) {\n          if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n            if (effects[i].ty === 5) {\n              return effectElements[i];\n            }\n\n            return effectElements[i]();\n          }\n\n          i += 1;\n        }\n\n        throw new Error();\n      }\n\n      var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n      var effectElements = [];\n      var i;\n      var len = data.ef.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (data.ef[i].ty === 5) {\n          effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n        } else {\n          effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n        }\n      }\n\n      if (data.mn === 'ADBE Color Control') {\n        Object.defineProperty(groupInterface, 'color', {\n          get: function get() {\n            return effectElements[0]();\n          }\n        });\n      }\n\n      Object.defineProperties(groupInterface, {\n        numProperties: {\n          get: function get() {\n            return data.np;\n          }\n        },\n        _name: {\n          value: data.nm\n        },\n        propertyGroup: {\n          value: _propertyGroup\n        }\n      });\n      groupInterface.enabled = data.en !== 0;\n      groupInterface.active = groupInterface.enabled;\n      return groupInterface;\n    }\n\n    function createValueInterface(element, type, elem, propertyGroup) {\n      var expressionProperty = ExpressionPropertyInterface(element.p);\n\n      function interfaceFunction() {\n        if (type === 10) {\n          return elem.comp.compInterface(element.p.v);\n        }\n\n        return expressionProperty();\n      }\n\n      if (element.p.setGroupProperty) {\n        element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n      }\n\n      return interfaceFunction;\n    }\n\n    return ob;\n  }();\n\n  var ShapePathInterface = function () {\n    return function pathInterfaceFactory(shape, view, propertyGroup) {\n      var prop = view.sh;\n\n      function interfaceFunction(val) {\n        if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n          return interfaceFunction.path;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        path: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        shape: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        ix: {\n          value: shape.ix\n        },\n        propertyIndex: {\n          value: shape.ix\n        },\n        mn: {\n          value: shape.mn\n        },\n        propertyGroup: {\n          value: propertyGroup\n        }\n      });\n      return interfaceFunction;\n    };\n  }();\n\n  var ShapeExpressionInterface = function () {\n    function iterateElements(shapes, view, propertyGroup) {\n      var arr = [];\n      var i;\n      var len = shapes ? shapes.length : 0;\n\n      for (i = 0; i < len; i += 1) {\n        if (shapes[i].ty === 'gr') {\n          arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'fl') {\n          arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'st') {\n          arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tm') {\n          arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n        } else if (shapes[i].ty === 'el') {\n          arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sr') {\n          arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sh') {\n          arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rc') {\n          arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rd') {\n          arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rp') {\n          arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'gf') {\n          arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else {\n          arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n        }\n      }\n\n      return arr;\n    }\n\n    function contentsInterfaceFactory(shape, view, propertyGroup) {\n      var interfaces;\n\n      var interfaceFunction = function _interfaceFunction(value) {\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        if (typeof value === 'number') {\n          return interfaces[value - 1];\n        }\n\n        return null;\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n      interfaceFunction.numProperties = interfaces.length;\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.transform = transformInterface;\n      interfaceFunction.propertyIndex = shape.cix;\n      interfaceFunction._name = shape.nm;\n      return interfaceFunction;\n    }\n\n    function groupInterfaceFactory(shape, view, propertyGroup) {\n      var interfaceFunction = function _interfaceFunction(value) {\n        switch (value) {\n          case 'ADBE Vectors Group':\n          case 'Contents':\n          case 2:\n            return interfaceFunction.content;\n          // Not necessary for now. Keeping them here in case a new case appears\n          // case 'ADBE Vector Transform Group':\n          // case 3:\n\n          default:\n            return interfaceFunction.transform;\n        }\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.content = content;\n      interfaceFunction.transform = transformInterface;\n      Object.defineProperty(interfaceFunction, '_name', {\n        get: function get() {\n          return shape.nm;\n        }\n      }); // interfaceFunction.content = interfaceFunction;\n\n      interfaceFunction.numProperties = shape.np;\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.nm = shape.nm;\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function fillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Start Point' || val === 'start point') {\n          return interfaceFunction.startPoint;\n        }\n\n        if (val === 'End Point' || val === 'end point') {\n          return interfaceFunction.endPoint;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        startPoint: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        endPoint: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        type: {\n          get: function get() {\n            return 'a';\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function defaultInterfaceFactory() {\n      function interfaceFunction() {\n        return null;\n      }\n\n      return interfaceFunction;\n    }\n\n    function strokeInterfaceFactory(shape, view, propertyGroup) {\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n      function addPropertyToDashOb(i) {\n        Object.defineProperty(dashOb, shape.d[i].nm, {\n          get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n        });\n      }\n\n      var i;\n      var len = shape.d ? shape.d.length : 0;\n      var dashOb = {};\n\n      for (i = 0; i < len; i += 1) {\n        addPropertyToDashOb(i);\n        view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n      }\n\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (val === 'Stroke Width' || val === 'stroke width') {\n          return interfaceFunction.strokeWidth;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        strokeWidth: {\n          get: ExpressionPropertyInterface(view.w)\n        },\n        dash: {\n          get: function get() {\n            return dashOb;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n      return interfaceFunction;\n    }\n\n    function trimInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === shape.e.ix || val === 'End' || val === 'end') {\n          return interfaceFunction.end;\n        }\n\n        if (val === shape.s.ix) {\n          return interfaceFunction.start;\n        }\n\n        if (val === shape.o.ix) {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.propertyGroup = propertyGroup;\n      Object.defineProperties(interfaceFunction, {\n        start: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        end: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function transformInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.a.ix === value || value === 'Anchor Point') {\n          return interfaceFunction.anchorPoint;\n        }\n\n        if (shape.o.ix === value || value === 'Opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (shape.p.ix === value || value === 'Position') {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.s.ix === value || value === 'Scale') {\n          return interfaceFunction.scale;\n        }\n\n        if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n          return interfaceFunction.skew;\n        }\n\n        if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n          return interfaceFunction.skewAxis;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n      view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n      view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (view.transform.mProps.sk) {\n        view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n        view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n      }\n\n      view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        opacity: {\n          get: ExpressionPropertyInterface(view.transform.mProps.o)\n        },\n        position: {\n          get: ExpressionPropertyInterface(view.transform.mProps.p)\n        },\n        anchorPoint: {\n          get: ExpressionPropertyInterface(view.transform.mProps.a)\n        },\n        scale: {\n          get: ExpressionPropertyInterface(view.transform.mProps.s)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(view.transform.mProps.r)\n        },\n        skew: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sk)\n        },\n        skewAxis: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sa)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.ty = 'tr';\n      interfaceFunction.mn = shape.mn;\n      interfaceFunction.propertyGroup = propertyGroup;\n      return interfaceFunction;\n    }\n\n    function ellipseInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.s.ix === value) {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function starInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.pt.ix === value) {\n          return interfaceFunction.points;\n        }\n\n        if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n          return interfaceFunction.outerRadius;\n        }\n\n        if (shape.os.ix === value) {\n          return interfaceFunction.outerRoundness;\n        }\n\n        if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n          return interfaceFunction.innerRadius;\n        }\n\n        if (shape.is && shape.is.ix === value) {\n          return interfaceFunction.innerRoundness;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n      prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n      prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (shape.ir) {\n        prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n        prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        points: {\n          get: ExpressionPropertyInterface(prop.pt)\n        },\n        outerRadius: {\n          get: ExpressionPropertyInterface(prop.or)\n        },\n        outerRoundness: {\n          get: ExpressionPropertyInterface(prop.os)\n        },\n        innerRadius: {\n          get: ExpressionPropertyInterface(prop.ir)\n        },\n        innerRoundness: {\n          get: ExpressionPropertyInterface(prop.is)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function rectInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.roundness;\n        }\n\n        if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        roundness: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function roundedInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.r.ix === value || value === 'Round Corners 1') {\n          return interfaceFunction.radius;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        radius: {\n          get: ExpressionPropertyInterface(prop.rd)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function repeaterInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.c.ix === value || value === 'Copies') {\n          return interfaceFunction.copies;\n        }\n\n        if (shape.o.ix === value || value === 'Offset') {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n      prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        copies: {\n          get: ExpressionPropertyInterface(prop.c)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(prop.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    return function (shapes, view, propertyGroup) {\n      var interfaces;\n\n      function _interfaceFunction(value) {\n        if (typeof value === 'number') {\n          value = value === undefined ? 1 : value;\n\n          if (value === 0) {\n            return propertyGroup;\n          }\n\n          return interfaces[value - 1];\n        }\n\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      function parentGroupWrapper() {\n        return propertyGroup;\n      }\n\n      _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n      interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n      _interfaceFunction.numProperties = interfaces.length;\n      _interfaceFunction._name = 'Contents';\n      return _interfaceFunction;\n    };\n  }();\n\n  var TextExpressionInterface = function () {\n    return function (elem) {\n      var _sourceText;\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Text Document':\n            return _thisLayerFunction.sourceText;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisLayerFunction, 'sourceText', {\n        get: function get() {\n          elem.textProperty.getValue();\n          var stringValue = elem.textProperty.currentData.t;\n\n          if (!_sourceText || stringValue !== _sourceText.value) {\n            _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n            // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n            _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n            Object.defineProperty(_sourceText, 'style', {\n              get: function get() {\n                return {\n                  fillColor: elem.textProperty.currentData.fc\n                };\n              }\n            });\n          }\n\n          return _sourceText;\n        }\n      });\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n  var FootageInterface = function () {\n    var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n      var currentPropertyName = '';\n      var currentProperty = elem.getFootageData();\n\n      function init() {\n        currentPropertyName = '';\n        currentProperty = elem.getFootageData();\n        return searchProperty;\n      }\n\n      function searchProperty(value) {\n        if (currentProperty[value]) {\n          currentPropertyName = value;\n          currentProperty = currentProperty[value];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        var propertyNameIndex = value.indexOf(currentPropertyName);\n\n        if (propertyNameIndex !== -1) {\n          var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n          currentProperty = currentProperty[index];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        return '';\n      }\n\n      return init;\n    };\n\n    var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n      function interfaceFunction(value) {\n        if (value === 'Outline') {\n          return interfaceFunction.outlineInterface();\n        }\n\n        return null;\n      }\n\n      interfaceFunction._name = 'Outline';\n      interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n      return interfaceFunction;\n    };\n\n    return function (elem) {\n      function _interfaceFunction(value) {\n        if (value === 'Data') {\n          return _interfaceFunction.dataInterface;\n        }\n\n        return null;\n      }\n\n      _interfaceFunction._name = 'Data';\n      _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n      return _interfaceFunction;\n    };\n  }();\n\n  var interfaces = {\n    layer: LayerExpressionInterface,\n    effects: EffectsExpressionInterface,\n    comp: CompExpressionInterface,\n    shape: ShapeExpressionInterface,\n    text: TextExpressionInterface,\n    footage: FootageInterface\n  };\n\n  function getInterface(type) {\n    return interfaces[type] || null;\n  }\n\n  var expressionHelpers = function () {\n    function searchExpressions(elem, data, prop) {\n      if (data.x) {\n        prop.k = true;\n        prop.x = true;\n        prop.initiateExpression = ExpressionManager.initiateExpression;\n        prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n      }\n    }\n\n    function getValueAtTime(frameNum) {\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastFrame) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n        this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n        this._cachingAtTime.lastFrame = frameNum;\n      }\n\n      return this._cachingAtTime.value;\n    }\n\n    function getSpeedAtTime(frameNum) {\n      var delta = -0.01;\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var speed = 0;\n\n      if (v1.length) {\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          speed += Math.pow(v2[i] - v1[i], 2);\n        }\n\n        speed = Math.sqrt(speed) * 100;\n      } else {\n        speed = 0;\n      }\n\n      return speed;\n    }\n\n    function getVelocityAtTime(frameNum) {\n      if (this.vel !== undefined) {\n        return this.vel;\n      }\n\n      var delta = -0.001; // frameNum += this.elem.data.st;\n\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var velocity;\n\n      if (v1.length) {\n        velocity = createTypedArray('float32', v1.length);\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          // removing frameRate\n          // if needed, don't add it here\n          // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n          velocity[i] = (v2[i] - v1[i]) / delta;\n        }\n      } else {\n        velocity = (v2 - v1) / delta;\n      }\n\n      return velocity;\n    }\n\n    function getStaticValueAtTime() {\n      return this.pv;\n    }\n\n    function setGroupProperty(propertyGroup) {\n      this.propertyGroup = propertyGroup;\n    }\n\n    return {\n      searchExpressions: searchExpressions,\n      getSpeedAtTime: getSpeedAtTime,\n      getVelocityAtTime: getVelocityAtTime,\n      getValueAtTime: getValueAtTime,\n      getStaticValueAtTime: getStaticValueAtTime,\n      setGroupProperty: setGroupProperty\n    };\n  }();\n\n  function addPropertyDecorator() {\n    function loopOut(type, duration, durationFlag) {\n      if (!this.k || !this.keyframes) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n      if (currentFrame <= lastKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var firstKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n        } else {\n          cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n        }\n\n        firstKeyFrame = lastKeyFrame - cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (iterations % 2 !== 0) {\n          return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n        var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n          }\n\n          return ret;\n        }\n\n        return (endV - initV) * repeats + current;\n      } else if (type === 'continue') {\n        var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(lastValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n          }\n\n          return ret;\n        }\n\n        return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n      }\n\n      return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function loopIn(type, duration, durationFlag) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var firstKeyFrame = keyframes[0].t;\n\n      if (currentFrame >= firstKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var lastKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        lastKeyFrame = keyframes[duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n        } else {\n          cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n        }\n\n        lastKeyFrame = firstKeyFrame + cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n        if (iterations % 2 === 0) {\n          return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n        var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n          }\n\n          return ret;\n        }\n\n        return current - (endV - initV) * repeats;\n      } else if (type === 'continue') {\n        var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(firstValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n          }\n\n          return ret;\n        }\n\n        return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n      }\n\n      return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function smooth(width, samples) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      width = (width || 0.4) * 0.5;\n      samples = Math.floor(samples || 5);\n\n      if (samples <= 1) {\n        return this.pv;\n      }\n\n      var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n      var initFrame = currentTime - width;\n      var endFrame = currentTime + width;\n      var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n      var i = 0;\n      var j = 0;\n      var value;\n\n      if (this.pv.length) {\n        value = createTypedArray('float32', this.pv.length);\n      } else {\n        value = 0;\n      }\n\n      var sampleValue;\n\n      while (i < samples) {\n        sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n        if (this.pv.length) {\n          for (j = 0; j < this.pv.length; j += 1) {\n            value[j] += sampleValue[j];\n          }\n        } else {\n          value += sampleValue;\n        }\n\n        i += 1;\n      }\n\n      if (this.pv.length) {\n        for (j = 0; j < this.pv.length; j += 1) {\n          value[j] /= samples;\n        }\n      } else {\n        value /= samples;\n      }\n\n      return value;\n    }\n\n    function getTransformValueAtTime(time) {\n      if (!this._transformCachingAtTime) {\n        this._transformCachingAtTime = {\n          v: new Matrix()\n        };\n      } /// /\n\n\n      var matrix = this._transformCachingAtTime.v;\n      matrix.cloneFromProps(this.pre.props);\n\n      if (this.appliedTransformations < 1) {\n        var anchor = this.a.getValueAtTime(time);\n        matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n      }\n\n      if (this.appliedTransformations < 2) {\n        var scale = this.s.getValueAtTime(time);\n        matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n      }\n\n      if (this.sk && this.appliedTransformations < 3) {\n        var skew = this.sk.getValueAtTime(time);\n        var skewAxis = this.sa.getValueAtTime(time);\n        matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n      }\n\n      if (this.r && this.appliedTransformations < 4) {\n        var rotation = this.r.getValueAtTime(time);\n        matrix.rotate(-rotation * this.r.mult);\n      } else if (!this.r && this.appliedTransformations < 4) {\n        var rotationZ = this.rz.getValueAtTime(time);\n        var rotationY = this.ry.getValueAtTime(time);\n        var rotationX = this.rx.getValueAtTime(time);\n        var orientation = this.or.getValueAtTime(time);\n        matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n      }\n\n      if (this.data.p && this.data.p.s) {\n        var positionX = this.px.getValueAtTime(time);\n        var positionY = this.py.getValueAtTime(time);\n\n        if (this.data.p.z) {\n          var positionZ = this.pz.getValueAtTime(time);\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n        } else {\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n        }\n      } else {\n        var position = this.p.getValueAtTime(time);\n        matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n      }\n\n      return matrix; /// /\n    }\n\n    function getTransformStaticValueAtTime() {\n      return this.v.clone(new Matrix());\n    }\n\n    var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n    TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n      var prop = getTransformProperty(elem, data, container);\n\n      if (prop.dynamicProperties.length) {\n        prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      return prop;\n    };\n\n    var propertyGetProp = PropertyFactory.getProp;\n\n    PropertyFactory.getProp = function (elem, data, type, mult, container) {\n      var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n      // prop.loopOut = loopOut;\n      // prop.loopIn = loopIn;\n\n      if (prop.kf) {\n        prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      prop.loopOut = loopOut;\n      prop.loopIn = loopIn;\n      prop.smooth = smooth;\n      prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n      prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n      prop.numKeys = data.a === 1 ? data.k.length : 0;\n      prop.propertyIndex = data.ix;\n      var value = 0;\n\n      if (type !== 0) {\n        value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n      }\n\n      prop._cachingAtTime = {\n        lastFrame: initialDefaultFrame,\n        lastIndex: 0,\n        value: value\n      };\n      expressionHelpers.searchExpressions(elem, data, prop);\n\n      if (prop.k) {\n        container.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n\n    function getShapeValueAtTime(frameNum) {\n      // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n      if (!this._cachingAtTime) {\n        this._cachingAtTime = {\n          shapeValue: shapePool.clone(this.pv),\n          lastIndex: 0,\n          lastTime: initialDefaultFrame\n        };\n      }\n\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastTime) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n        this._cachingAtTime.lastTime = frameNum;\n        this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n      }\n\n      return this._cachingAtTime.shapeValue;\n    }\n\n    var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n    var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n    function ShapeExpressions() {}\n\n    ShapeExpressions.prototype = {\n      vertices: function vertices(prop, time) {\n        if (this.k) {\n          this.getValue();\n        }\n\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        var i;\n        var len = shapePath._length;\n        var vertices = shapePath[prop];\n        var points = shapePath.v;\n        var arr = createSizedArray(len);\n\n        for (i = 0; i < len; i += 1) {\n          if (prop === 'i' || prop === 'o') {\n            arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n          } else {\n            arr[i] = [vertices[i][0], vertices[i][1]];\n          }\n        }\n\n        return arr;\n      },\n      points: function points(time) {\n        return this.vertices('v', time);\n      },\n      inTangents: function inTangents(time) {\n        return this.vertices('i', time);\n      },\n      outTangents: function outTangents(time) {\n        return this.vertices('o', time);\n      },\n      isClosed: function isClosed() {\n        return this.v.c;\n      },\n      pointOnPath: function pointOnPath(perc, time) {\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        if (!this._segmentsLength) {\n          this._segmentsLength = bez.getSegmentsLength(shapePath);\n        }\n\n        var segmentsLength = this._segmentsLength;\n        var lengths = segmentsLength.lengths;\n        var lengthPos = segmentsLength.totalLength * perc;\n        var i = 0;\n        var len = lengths.length;\n        var accumulatedLength = 0;\n        var pt;\n\n        while (i < len) {\n          if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n            var initIndex = i;\n            var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n            var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n            pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n            break;\n          } else {\n            accumulatedLength += lengths[i].addedLength;\n          }\n\n          i += 1;\n        }\n\n        if (!pt) {\n          pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n        }\n\n        return pt;\n      },\n      vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n        // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n        if (perc == 1) {\n          // eslint-disable-line eqeqeq\n          perc = this.v.c;\n        } else if (perc == 0) {\n          // eslint-disable-line eqeqeq\n          perc = 0.999;\n        }\n\n        var pt1 = this.pointOnPath(perc, time);\n        var pt2 = this.pointOnPath(perc + 0.001, time);\n        var xLength = pt2[0] - pt1[0];\n        var yLength = pt2[1] - pt1[1];\n        var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n        if (magnitude === 0) {\n          return [0, 0];\n        }\n\n        var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n        return unitVector;\n      },\n      tangentOnPath: function tangentOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'tangent');\n      },\n      normalOnPath: function normalOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'normal');\n      },\n      setGroupProperty: expressionHelpers.setGroupProperty,\n      getValueAtTime: expressionHelpers.getStaticValueAtTime\n    };\n    extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n    extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n    KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n    KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n    var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n    ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n      var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n      prop.propertyIndex = data.ix;\n      prop.lock = false;\n\n      if (type === 3) {\n        expressionHelpers.searchExpressions(elem, data.pt, prop);\n      } else if (type === 4) {\n        expressionHelpers.searchExpressions(elem, data.ks, prop);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n  }\n\n  function initialize$1() {\n    addPropertyDecorator();\n  }\n\n  function addDecorator() {\n    function searchExpressions() {\n      if (this.data.d.x) {\n        this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n        this.addEffect(this.getExpressionValue.bind(this));\n        return true;\n      }\n\n      return null;\n    }\n\n    TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n      var newValue = this.calculateExpression(text);\n\n      if (currentValue.t !== newValue) {\n        var newData = {};\n        this.copyData(newData, currentValue);\n        newData.t = newValue.toString();\n        newData.__complete = false;\n        return newData;\n      }\n\n      return currentValue;\n    };\n\n    TextProperty.prototype.searchProperty = function () {\n      var isKeyframed = this.searchKeyframes();\n      var hasExpressions = this.searchExpressions();\n      this.kf = isKeyframed || hasExpressions;\n      return this.kf;\n    };\n\n    TextProperty.prototype.searchExpressions = searchExpressions;\n  }\n\n  function initialize() {\n    addDecorator();\n  }\n\n  function SVGComposableEffect() {}\n\n  SVGComposableEffect.prototype = {\n    createMergeNode: function createMergeNode(resultId, ins) {\n      var feMerge = createNS('feMerge');\n      feMerge.setAttribute('result', resultId);\n      var feMergeNode;\n      var i;\n\n      for (i = 0; i < ins.length; i += 1) {\n        feMergeNode = createNS('feMergeNode');\n        feMergeNode.setAttribute('in', ins[i]);\n        feMerge.appendChild(feMergeNode);\n        feMerge.appendChild(feMergeNode);\n      }\n\n      return feMerge;\n    }\n  };\n\n  var linearFilterValue = '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';\n\n  function SVGTintFilter(filter, filterManager, elem, id, source) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n    this.linearFilter = feColorMatrix;\n    feColorMatrix.setAttribute('result', id + '_tint_1');\n    filter.appendChild(feColorMatrix);\n    feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_2');\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n    var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n    filter.appendChild(feMerge);\n  }\n\n  extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n  SVGTintFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var colorBlack = this.filterManager.effectElements[0].p.v;\n      var colorWhite = this.filterManager.effectElements[1].p.v;\n      var opacity = this.filterManager.effectElements[2].p.v / 100;\n      this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\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 1 0');\n    }\n  };\n\n  function SVGFillFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id);\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n  }\n\n  SVGFillFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color = this.filterManager.effectElements[2].p.v;\n      var opacity = this.filterManager.effectElements[6].p.v;\n      this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGStrokeEffect(fil, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.elem = elem;\n    this.paths = [];\n  }\n\n  SVGStrokeEffect.prototype.initialize = function () {\n    var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n    var path;\n    var groupPath;\n    var i;\n    var len;\n\n    if (this.filterManager.effectElements[1].p.v === 1) {\n      len = this.elem.maskManager.masksProperties.length;\n      i = 0;\n    } else {\n      i = this.filterManager.effectElements[0].p.v - 1;\n      len = i + 1;\n    }\n\n    groupPath = createNS('g');\n    groupPath.setAttribute('fill', 'none');\n    groupPath.setAttribute('stroke-linecap', 'round');\n    groupPath.setAttribute('stroke-dashoffset', 1);\n\n    for (i; i < len; i += 1) {\n      path = createNS('path');\n      groupPath.appendChild(path);\n      this.paths.push({\n        p: path,\n        m: i\n      });\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 3) {\n      var mask = createNS('mask');\n      var id = createElementID();\n      mask.setAttribute('id', id);\n      mask.setAttribute('mask-type', 'alpha');\n      mask.appendChild(groupPath);\n      this.elem.globalData.defs.appendChild(mask);\n      var g = createNS('g');\n      g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n      while (elemChildren[0]) {\n        g.appendChild(elemChildren[0]);\n      }\n\n      this.elem.layerElement.appendChild(g);\n      this.masker = mask;\n      groupPath.setAttribute('stroke', '#fff');\n    } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (this.filterManager.effectElements[10].p.v === 2) {\n        elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n        while (elemChildren.length) {\n          this.elem.layerElement.removeChild(elemChildren[0]);\n        }\n      }\n\n      this.elem.layerElement.appendChild(groupPath);\n      this.elem.layerElement.removeAttribute('mask');\n      groupPath.setAttribute('stroke', '#fff');\n    }\n\n    this.initialized = true;\n    this.pathMasker = groupPath;\n  };\n\n  SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    var i;\n    var len = this.paths.length;\n    var mask;\n    var path;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.paths[i].m !== -1) {\n        mask = this.elem.maskManager.viewData[this.paths[i].m];\n        path = this.paths[i].p;\n\n        if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n          path.setAttribute('d', mask.lastPath);\n        }\n\n        if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n          var dasharrayValue;\n\n          if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n            var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var l = path.getTotalLength();\n            dasharrayValue = '0 0 0 ' + l * s + ' ';\n            var lineLength = l * (e - s);\n            var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n            var units = Math.floor(lineLength / segment);\n            var j;\n\n            for (j = 0; j < units; j += 1) {\n              dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n            }\n\n            dasharrayValue += '0 ' + l * 10 + ' 0 0';\n          } else {\n            dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n          }\n\n          path.setAttribute('stroke-dasharray', dasharrayValue);\n        }\n      }\n    }\n\n    if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n      this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n    }\n\n    if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n      this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n        var color = this.filterManager.effectElements[3].p.v;\n        this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n      }\n    }\n  };\n\n  function SVGTritoneFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    filter.appendChild(feColorMatrix);\n    var feComponentTransfer = createNS('feComponentTransfer');\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n    feComponentTransfer.setAttribute('result', id);\n    this.matrixFilter = feComponentTransfer;\n    var feFuncR = createNS('feFuncR');\n    feFuncR.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncR);\n    this.feFuncR = feFuncR;\n    var feFuncG = createNS('feFuncG');\n    feFuncG.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncG);\n    this.feFuncG = feFuncG;\n    var feFuncB = createNS('feFuncB');\n    feFuncB.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncB);\n    this.feFuncB = feFuncB;\n    filter.appendChild(feComponentTransfer);\n  }\n\n  SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color1 = this.filterManager.effectElements[0].p.v;\n      var color2 = this.filterManager.effectElements[1].p.v;\n      var color3 = this.filterManager.effectElements[2].p.v;\n      var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n      var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n      var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n      this.feFuncR.setAttribute('tableValues', tableR);\n      this.feFuncG.setAttribute('tableValues', tableG);\n      this.feFuncB.setAttribute('tableValues', tableB);\n    }\n  };\n\n  function SVGProLevelsFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var effectElements = this.filterManager.effectElements;\n    var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n    if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n      this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n    } // Green\n\n\n    if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n      this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n    } // Blue\n\n\n    if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n      this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n    } // Alpha\n\n\n    if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n      this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n    } // RGB\n\n\n    if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      filter.appendChild(feComponentTransfer);\n    }\n\n    if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n      feComponentTransfer = createNS('feComponentTransfer');\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      feComponentTransfer.setAttribute('result', id);\n      filter.appendChild(feComponentTransfer);\n      this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n      this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n      this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n    }\n  }\n\n  SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n    var feFunc = createNS(type);\n    feFunc.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFunc);\n    return feFunc;\n  };\n\n  SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n    var cnt = 0;\n    var segments = 256;\n    var perc;\n    var min = Math.min(inputBlack, inputWhite);\n    var max = Math.max(inputBlack, inputWhite);\n    var table = Array.call(null, {\n      length: segments\n    });\n    var colorValue;\n    var pos = 0;\n    var outputDelta = outputWhite - outputBlack;\n    var inputDelta = inputWhite - inputBlack;\n\n    while (cnt <= 256) {\n      perc = cnt / 256;\n\n      if (perc <= min) {\n        colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n      } else if (perc >= max) {\n        colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n      } else {\n        colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n      }\n\n      table[pos] = colorValue;\n      pos += 1;\n      cnt += 256 / (segments - 1);\n    }\n\n    return table.join(' ');\n  };\n\n  SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var val;\n      var effectElements = this.filterManager.effectElements;\n\n      if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n        val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n        this.feFuncRComposed.setAttribute('tableValues', val);\n        this.feFuncGComposed.setAttribute('tableValues', val);\n        this.feFuncBComposed.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n        val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n        this.feFuncR.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n        val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n        this.feFuncG.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n        val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n        this.feFuncB.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n        val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n        this.feFuncA.setAttribute('tableValues', val);\n      }\n    }\n  };\n\n  function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n    var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n    var filterSize = filterManager.data.fs || globalFilterSize;\n    filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n    filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n    filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n    filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('in', 'SourceAlpha');\n    feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n    feGaussianBlur.setAttribute('stdDeviation', '0');\n    this.feGaussianBlur = feGaussianBlur;\n    filter.appendChild(feGaussianBlur);\n    var feOffset = createNS('feOffset');\n    feOffset.setAttribute('dx', '25');\n    feOffset.setAttribute('dy', '0');\n    feOffset.setAttribute('in', id + '_drop_shadow_1');\n    feOffset.setAttribute('result', id + '_drop_shadow_2');\n    this.feOffset = feOffset;\n    filter.appendChild(feOffset);\n    var feFlood = createNS('feFlood');\n    feFlood.setAttribute('flood-color', '#00ff00');\n    feFlood.setAttribute('flood-opacity', '1');\n    feFlood.setAttribute('result', id + '_drop_shadow_3');\n    this.feFlood = feFlood;\n    filter.appendChild(feFlood);\n    var feComposite = createNS('feComposite');\n    feComposite.setAttribute('in', id + '_drop_shadow_3');\n    feComposite.setAttribute('in2', id + '_drop_shadow_2');\n    feComposite.setAttribute('operator', 'in');\n    feComposite.setAttribute('result', id + '_drop_shadow_4');\n    filter.appendChild(feComposite);\n    var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n    filter.appendChild(feMerge); //\n  }\n\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n  SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n        this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n      }\n\n      if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n        var col = this.filterManager.effectElements[0].p.v;\n        this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n      }\n\n      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n      }\n\n      if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n        var distance = this.filterManager.effectElements[3].p.v;\n        var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n        var x = distance * Math.cos(angle);\n        var y = distance * Math.sin(angle);\n        this.feOffset.setAttribute('dx', x);\n        this.feOffset.setAttribute('dy', y);\n      }\n    }\n  };\n\n  var _svgMatteSymbols = [];\n\n  function SVGMatte3Effect(filterElem, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.filterElem = filterElem;\n    this.elem = elem;\n    elem.matteElement = createNS('g');\n    elem.matteElement.appendChild(elem.layerElement);\n    elem.matteElement.appendChild(elem.transformedElement);\n    elem.baseElement = elem.matteElement;\n  }\n\n  SVGMatte3Effect.prototype.findSymbol = function (mask) {\n    var i = 0;\n    var len = _svgMatteSymbols.length;\n\n    while (i < len) {\n      if (_svgMatteSymbols[i] === mask) {\n        return _svgMatteSymbols[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n    var parentNode = mask.layerElement.parentNode;\n\n    if (!parentNode) {\n      return;\n    }\n\n    var children = parentNode.children;\n    var i = 0;\n    var len = children.length;\n\n    while (i < len) {\n      if (children[i] === mask.layerElement) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    var nextChild;\n\n    if (i <= len - 2) {\n      nextChild = children[i + 1];\n    }\n\n    var useElem = createNS('use');\n    useElem.setAttribute('href', '#' + symbolId);\n\n    if (nextChild) {\n      parentNode.insertBefore(useElem, nextChild);\n    } else {\n      parentNode.appendChild(useElem);\n    }\n  };\n\n  SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n    if (!this.findSymbol(mask)) {\n      var symbolId = createElementID();\n      var masker = createNS('mask');\n      masker.setAttribute('id', mask.layerId);\n      masker.setAttribute('mask-type', 'alpha');\n\n      _svgMatteSymbols.push(mask);\n\n      var defs = elem.globalData.defs;\n      defs.appendChild(masker);\n      var symbol = createNS('symbol');\n      symbol.setAttribute('id', symbolId);\n      this.replaceInParent(mask, symbolId);\n      symbol.appendChild(mask.layerElement);\n      defs.appendChild(symbol);\n      var useElem = createNS('use');\n      useElem.setAttribute('href', '#' + symbolId);\n      masker.appendChild(useElem);\n      mask.data.hd = false;\n      mask.show();\n    }\n\n    elem.setMatte(mask.layerId);\n  };\n\n  SVGMatte3Effect.prototype.initialize = function () {\n    var ind = this.filterManager.effectElements[0].p.v;\n    var elements = this.elem.comp.elements;\n    var i = 0;\n    var len = elements.length;\n\n    while (i < len) {\n      if (elements[i] && elements[i].data.ind === ind) {\n        this.setElementAsMask(this.elem, elements[i]);\n      }\n\n      i += 1;\n    }\n\n    this.initialized = true;\n  };\n\n  SVGMatte3Effect.prototype.renderFrame = function () {\n    if (!this.initialized) {\n      this.initialize();\n    }\n  };\n\n  function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n    // Outset the filter region by 100% on all sides to accommodate blur expansion.\n    filter.setAttribute('x', '-100%');\n    filter.setAttribute('y', '-100%');\n    filter.setAttribute('width', '300%');\n    filter.setAttribute('height', '300%');\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('result', id);\n    filter.appendChild(feGaussianBlur);\n    this.feGaussianBlur = feGaussianBlur;\n  }\n\n  SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      // Empirical value, matching AE's blur appearance.\n      var kBlurrinessToSigma = 0.3;\n      var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  function TransformEffect() {}\n\n  TransformEffect.prototype.init = function (effectsManager) {\n    this.effectsManager = effectsManager;\n    this.type = effectTypes.TRANSFORM_EFFECT;\n    this.matrix = new Matrix();\n    this.opacity = -1;\n    this._mdf = false;\n    this._opMdf = false;\n  };\n\n  TransformEffect.prototype.renderFrame = function (forceFrame) {\n    this._opMdf = false;\n    this._mdf = false;\n\n    if (forceFrame || this.effectsManager._mdf) {\n      var effectElements = this.effectsManager.effectElements;\n      var anchor = effectElements[0].p.v;\n      var position = effectElements[1].p.v;\n      var isUniformScale = effectElements[2].p.v === 1;\n      var scaleHeight = effectElements[3].p.v;\n      var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n      var skew = effectElements[5].p.v;\n      var skewAxis = effectElements[6].p.v;\n      var rotation = effectElements[7].p.v;\n      this.matrix.reset();\n      this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n      this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n      this.matrix.rotate(-rotation * degToRads);\n      this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n      this.matrix.translate(position[0], position[1], 0);\n      this._mdf = true;\n\n      if (this.opacity !== effectElements[8].p.v) {\n        this.opacity = effectElements[8].p.v;\n        this._opMdf = true;\n      }\n    }\n  };\n\n  function SVGTransformEffect(_, filterManager) {\n    this.init(filterManager);\n  }\n\n  extendPrototype([TransformEffect], SVGTransformEffect);\n\n  function CVTransformEffect(effectsManager) {\n    this.init(effectsManager);\n  }\n\n  extendPrototype([TransformEffect], CVTransformEffect);\n\n  registerRenderer('canvas', CanvasRenderer);\n  registerRenderer('html', HybridRenderer);\n  registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n  ShapeModifiers.registerModifier('tm', TrimModifier);\n  ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n  ShapeModifiers.registerModifier('rp', RepeaterModifier);\n  ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n  ShapeModifiers.registerModifier('zz', ZigZagModifier);\n  ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n  setExpressionsPlugin(Expressions);\n  setExpressionInterfaces(getInterface);\n  initialize$1();\n  initialize(); // Registering svg effects\n\n  registerEffect$1(20, SVGTintFilter, true);\n  registerEffect$1(21, SVGFillFilter, true);\n  registerEffect$1(22, SVGStrokeEffect, false);\n  registerEffect$1(23, SVGTritoneFilter, true);\n  registerEffect$1(24, SVGProLevelsFilter, true);\n  registerEffect$1(25, SVGDropShadowEffect, true);\n  registerEffect$1(28, SVGMatte3Effect, false);\n  registerEffect$1(29, SVGGaussianBlurEffect, true);\n  registerEffect$1(35, SVGTransformEffect, false);\n  registerEffect(35, CVTransformEffect);\n\n  return lottie;\n\n}));\n"],"names":["useLottie","props","style","animationData","loop","autoplay","initialSegment","onComplete","onLoopComplete","onEnterFrame","onSegmentStart","onConfigReady","onDataReady","onDataFailed","onLoadedImages","onDOMLoaded","onDestroy","lottieRef","renderer","name","assetsPath","rendererSettings","rest","_objectWithoutProperties","_excluded$1","_useState2","_slicedToArray","React","useState","animationLoaded","setAnimationLoaded","animationInstanceRef","useRef","animationContainer","play","_a","current","stop","pause","setSpeed","speed","goToAndPlay","value","isFrame","goToAndStop","setDirection","direction","playSegments","segments","forceFlag","setSubframe","useSubFrames","getDuration","inFrames","destroy","undefined","loadAnimation","forcedConfigs","arguments","length","config","_objectSpread2","container","lottie__default","useEffect","onUnmount","Array","isArray","currentRawFrame","setSegment","resetSegments","listeners","handler","filter","listener","deregisterList","map","addEventListener","removeEventListener","forEach","deregister","View","React__default","createElement","ref","animationContainerRef","animationItem","getContainerVisibility","_container$getBoundin","getBoundingClientRect","top","height","window","innerHeight","getContainerCursorPosition","cursorX","cursorY","_container$getBoundin2","x","left","width","y","useInitInteractivity","_ref","wrapperRef","mode","actions","wrapper","scrollModeHandler","assignedSegment","scrollHandler","currentPercent","action","find","_ref2","visibility","type","frames","frameToGo","Math","ceil","firstFrame","isPaused","document","cursorModeHandler","handleCursor","_x","_y","pos","_ref3","position","Number","isNaN","xPercent","yPercent","mouseMoveHandler","ev","clientX","clientY","mouseOutHandler","useLottieInteractivity","_ref4","lottieObj","Lottie","_b","_c","interactivity","lottieProps","_excluded","_useLottie","factory","navigator","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sources","destination","i","sourcePrototype","len","attr","prototype","Object","hasOwnProperty","call","getDescriptor","object","prop","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","this","audios","_volume","_isMuted","addAudio","audio","push","resume","setRate","rateValue","createAudio","assetPath","Howl","src","isPlaying","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","Uint8ClampedArray","Float32Array","Int16Array","createSizedArray","apply","_typeof$6","obj","Symbol","iterator","constructor","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","test","userAgent","_shouldRoundValues","bmPow","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","max","bmMin","min","BMMath","ProjectInterface$1","propertyNames","random","abs","val","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","round","styleDiv","element","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","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","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","data","_workerSelf","setupWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","createWorker","e","completeLayers","layers","comps","layerData","j","jLen","k","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","id","comp","findComp","__used","JSON","parse","stringify","ks","it","o","checkVersion","minimum","animVersionString","animVersion","split","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","assets","checkChars","chars","charData","ip","op","st","sr","a","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","checkShapes","completeClosingShapes","closed","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","indexOf","response","responseText","load","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","join","error","send","completeData","payload","animation","event","process","onError","createProcess","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","bind","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","getAsset","createImgData","crossOrigin","createImageData","setAttributeNS","_elementHelper","append","appendChild","setCacheType","elementHelper","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","splice","markerParser","parsePayloadLines","line","lines","keys","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","key","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","frameRate","frameMult","playSpeed","playDirection","playCount","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","animType","RendererClass","globalData","defs","setProjectInterface","parseInt","autoloadSegments","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","setTimeout","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","renderFrame","resetFrame","triggerRenderFrameError","togglePause","setCurrentRawFrameValue","getMarkerData","markerName","marker","numValue","frameModifier","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","init","end","pendingFrame","setLoop","isLooping","getPath","getAssetData","hide","show","updateDocumentData","index","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","concat","slice","getElementsByClassName","lenAnims","setAttribute","body","getElementsByTagName","innerText","div","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","str","replace","beziers","bezEasing","BezierEasing","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","get","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","point","lastPoint","lengthData","BezierData","segmentLength","PointData","partial","partialLength","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","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","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","n","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","out","ax","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","values","c1","cos","c2","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","m","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","lottie","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","exports","define","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","pop","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","delta","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","t2","box","boundingBox","cx","cy","splitData","boxIntersect","intersectsImpl","depth","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","setPoint","outputBezier","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","getProjectingAngle","cur","prevIndex","nextIndex","pVector","zigZagCorner","frequency","pointType","prevPoint","nextPoint","prevDist","nextDist","zigZagSegment","dist","normalAngle","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","tangentAngle","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","right","mid","flex","inflectionPoints","OffsetPathModifier","getFontProperties","fontData","styles","fStyle","fWeight","toLowerCase","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","derivative","denom","tcusp","square","root","p10","p11","p20","p21","bounds","bottom","other","shapeSegmentInverted","pointsType","count","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","emptyChar","w","size","combinedCharacters","BLACK_FLAG_CODE_POINT","REGIONAL_CHARACTER_A_CODE_POINT","REGIONAL_CHARACTER_Z_CODE_POINT","surrogateModifiers","setUpNode","font","family","parentNode","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","familyArray","enabledFamilies","trimFontOptions","parent","createHelper","def","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measureText","text","getComputedTextLength","getCodePoint","string","codePoint","charCodeAt","second","isRegionalCode","Font","typekitLoaded","_warned","Date","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","isVariationSelector","fontPrototype","found","ch","list","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","querySelectorAll","rel","sc","getCharData","_char","console","warn","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","removeChild","SlotManager","slotFactory","RenderableElement","slots","assign","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","BaseElement","FrameElement","FootageElement","imageLoader","initBaseData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","eff","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","content","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","FootageInterface","getFootageData","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","pendingElements","getElementById","pathValue","setupGlobalData","fontsContainer","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","renderLocalTransform","localTransforms","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","filterManager","source","createFilter","filters","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ms","ost","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","charAt","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","add","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","runExpressions","destroyed","ShapeTransformManager","sequences","sequenceList","transform_key_count","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","String","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","insertBefore","setElements","getElements","destroyElements","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","svg","loadLuma","_svg","createLumaSvgFilter","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","operationsMap","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","CVTextElement","stroke","fill","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","CanvasContext","strokeStyle","lineCap","CVContextData","stack","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","CVCompElement","CanvasRenderer","clearCanvas","context","dpr","devicePixelRatio","currentGlobalAlpha","contextData","ctxTransform","ctxOpacity","ctxFillStyle","ctxStrokeStyle","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFill","ctxFillRect","ctxStroke","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","createElements","buffers","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearRect","prepareLayer","bufferCtx","drawImage","getTransform","exitLayer","buffer","forceRealStack","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","grd","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","globalAlpha","rule","actionFlag","containerStyle","mozTransformOrigin","setContext","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","fillType","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","cWidth","cHeight","floatingContainer","_createBaseContainerElements","_thisLayerFunction","defineProperty","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","nodecrypto","global","rngname","startdenom","significance","ARC4","keylen","me","S","copy","flatten","result","typ","mixkey","seed","smear","stringseed","tostring","options","shortseed","entropy","randomBytes","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","autoseed","arc4","prng","int32","quick","pass","is_math_call","state","initialize$2","propTypes","SHAPE","_typeof$1","ExpressionManager","fetch","_lottieGlobal","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","noOp","_value","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","_masksInterfaces","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","anchorPointDescriptor","defineProperties","anchor_point","startTime","_name","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","createGroupInterface","groupInterface","mn","_propertyGroup","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","effectsData","ShapePathInterface","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","start","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","_sourceText","sourceText","stringValue","fillColor","_typeof","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","colorBlack","colorWhite","groupPath","elemChildren","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","TransformEffect","SVGTransformEffect","CVTransformEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","module"],"sourceRoot":""}