{"version":3,"file":"lottie.cjs","sources":["../../src/libs/lottie.js"],"sourcesContent":["const lottie = /* @__PURE__ */ (() => {\n  if (typeof navigator === 'undefined' || typeof document === 'undefined') return {}\n\n  const svgNS = 'http://www.w3.org/2000/svg'\n\n  let locationHref = ''\n  let _useWebWorker = false\n\n  const initialDefaultFrame = -999999\n\n  const setWebWorker = (flag) => {\n    _useWebWorker = !!flag\n  }\n  const getWebWorker = () => _useWebWorker\n\n  const setLocationHref = (value) => {\n    locationHref = value\n  }\n  const getLocationHref = () => locationHref\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    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr))\n          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    ProxyFunction.prototype = prototype\n    return ProxyFunction\n  }\n\n  // import Howl from '../../3rd_party/howler';\n\n  const 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 (audio) {\n        this.audios.push(audio)\n      },\n      pause: function () {\n        var i\n        var len = this.audios.length\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause()\n        }\n      },\n      resume: function () {\n        var i\n        var len = this.audios.length\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume()\n        }\n      },\n      setRate: function (rateValue) {\n        var i\n        var len = this.audios.length\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue)\n        }\n      },\n      createAudio: function (assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath)\n        }\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath],\n          })\n        }\n        return {\n          isPlaying: false,\n          play: function () {\n            this.isPlaying = true\n          },\n          seek: function () {\n            this.isPlaying = false\n          },\n          playing: function () {},\n          rate: function () {},\n          setVolume: function () {},\n        }\n      },\n      setAudioFactory: function (audioFactory) {\n        this.audioFactory = audioFactory\n      },\n      setVolume: function (value) {\n        this._volume = value\n        this._updateVolume()\n      },\n      mute: function () {\n        this._isMuted = true\n        this._updateVolume()\n      },\n      unmute: function () {\n        this._isMuted = false\n        this._updateVolume()\n      },\n      getVolume: function () {\n        return this._volume\n      },\n      _updateVolume: function () {\n        var i\n        var len = this.audios.length\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1))\n        }\n      },\n    }\n\n    return function () {\n      return new AudioController()\n    }\n  })()\n\n  const createTypedArray = (function () {\n    function createRegularArray(type, len) {\n      var i = 0\n      var arr = []\n      var value\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1\n          break\n        default:\n          value = 1.1\n          break\n      }\n      for (i = 0; i < len; i += 1) {\n        arr.push(value)\n      }\n      return arr\n    }\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len)\n      }\n      if (type === 'int16') {\n        return new Int16Array(len)\n      }\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len)\n      }\n      return createRegularArray(type, len)\n    }\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory\n    }\n    return createRegularArray\n  })()\n\n  function createSizedArray(len) {\n    return Array.apply(null, { length: len })\n  }\n\n  let subframeEnabled = true\n  let expressionsPlugin = null\n  let idPrefix$1 = ''\n  const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)\n  let _shouldRoundValues = false\n  const bmPow = Math.pow\n  const bmSqrt = Math.sqrt\n  const bmFloor = Math.floor\n  const bmMax = Math.max\n  const bmMin = Math.min\n\n  const BMMath = {}\n  ;(function () {\n    var propertyNames = [\n      'abs',\n      'acos',\n      'acosh',\n      'asin',\n      'asinh',\n      'atan',\n      'atanh',\n      'atan2',\n      'ceil',\n      'cbrt',\n      'expm1',\n      'clz32',\n      'cos',\n      'cosh',\n      'exp',\n      'floor',\n      'fround',\n      'hypot',\n      'imul',\n      'log',\n      'log1p',\n      'log2',\n      'log10',\n      'max',\n      'min',\n      'pow',\n      'random',\n      'round',\n      'sign',\n      'sin',\n      'sinh',\n      'sqrt',\n      'tan',\n      'tanh',\n      'trunc',\n      'E',\n      'LN10',\n      'LN2',\n      'LOG10E',\n      'LOG2E',\n      'PI',\n      'SQRT1_2',\n      'SQRT2',\n    ]\n    var i\n    var len = propertyNames.length\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  BMMath.random = Math.random\n  BMMath.abs = function (val) {\n    var tOfVal = typeof val\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length)\n      var i\n      var len = val.length\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i])\n      }\n      return absArr\n    }\n    return Math.abs(val)\n  }\n  let defaultCurveSegments = 150\n  const degToRads = Math.PI / 180\n  const 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    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  const 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    switch (i % 6) {\n      case 0:\n        r = v\n        g = t\n        b = p\n        break\n      case 1:\n        r = q\n        g = v\n        b = p\n        break\n      case 2:\n        r = p\n        g = v\n        b = t\n        break\n      case 3:\n        r = p\n        g = q\n        b = v\n        break\n      case 4:\n        r = t\n        g = p\n        b = v\n        break\n      case 5:\n        r = v\n        g = p\n        b = q\n        break\n      default:\n        break\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      case r:\n        h = g - b + d * (g < b ? 6 : 0)\n        h /= 6 * d\n        break\n      case g:\n        h = b - r + d * 2\n        h /= 6 * d\n        break\n      case b:\n        h = r - g + d * 4\n        h /= 6 * d\n        break\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    if (hsv[1] > 1) {\n      hsv[1] = 1\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0\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    if (hsv[2] > 1) {\n      hsv[2] = 1\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0\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    if (hsv[0] > 1) {\n      hsv[0] -= 1\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1\n    }\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2])\n  }\n\n  const rgbToHex = (function () {\n    var colorMap = []\n    var i\n    var hex\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      if (g < 0) {\n        g = 0\n      }\n      if (b < 0) {\n        b = 0\n      }\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b]\n    }\n  })()\n\n  const setSubframeEnabled = (flag) => {\n    subframeEnabled = !!flag\n  }\n  const getSubframeEnabled = () => subframeEnabled\n  const setExpressionsPlugin = (value) => {\n    expressionsPlugin = value\n  }\n  const getExpressionsPlugin = () => expressionsPlugin\n  const setDefaultCurveSegments = (value) => {\n    defaultCurveSegments = value\n  }\n  const getDefaultCurveSegments = () => defaultCurveSegments\n  const setIdPrefix = (value) => {\n    idPrefix$1 = value\n  }\n  const getIdPrefix = () => idPrefix$1\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type)\n  }\n\n  const dataManager = (function () {\n    var _counterId = 1\n    var processes = []\n    var workerFn\n    var workerInstance\n    var workerProxy = {\n      onmessage: function () {},\n      postMessage: function (path) {\n        workerFn({\n          data: path,\n        })\n      },\n    }\n    var _workerSelf = {\n      postMessage: function (data) {\n        workerProxy.onmessage({\n          data: data,\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()], { type: 'text/javascript' })\n        // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n        var url = URL.createObjectURL(blob)\n        return new Worker(url)\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              for (i = 0; i < len; i += 1) {\n                layerData = layers[i]\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true\n                  if (layerData.tt) {\n                    layers[i - 1].td = layerData.tt\n                  }\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties\n                    jLen = maskProps.length\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                        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                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0])\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                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)\n                    // 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                    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              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i]\n                }\n                i += 1\n              }\n              return null\n            }\n\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps)\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true\n                  return comp.layers\n                }\n                return JSON.parse(JSON.stringify(comp.layers))\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              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                    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                      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              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              if (minimum[0] > animVersion[0]) {\n                return true\n              }\n              if (animVersion[0] > minimum[0]) {\n                return false\n              }\n              if (minimum[1] > animVersion[1]) {\n                return true\n              }\n              if (animVersion[1] > minimum[1]) {\n                return false\n              }\n              if (minimum[2] > animVersion[2]) {\n                return true\n              }\n              if (animVersion[2] > minimum[2]) {\n                return false\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                    {\n                      s: documentData,\n                      t: 0,\n                    },\n                  ],\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i\n                var len = layers.length\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                  if (animationData.assets) {\n                    var i\n                    var len = animationData.assets.length\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                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i]\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: { k: [0, 0], a: 0 },\n                        s: { k: [100, 100], a: 0 },\n                        a: { k: [0, 0], a: 0 },\n                        r: { k: 0, a: 0 },\n                        o: { k: 100, a: 0 },\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: { k: [0, 0], a: 0 },\n                          s: { k: [100, 100], a: 0 },\n                          a: { k: [0, 0], a: 0 },\n                          r: { k: 0, a: 0 },\n                          o: { k: 100, a: 0 },\n                          sk: { k: 0, a: 0 },\n                          sa: { k: 0, a: 0 },\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                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a,\n                  }\n                }\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p,\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                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                  if (animationData.assets) {\n                    var i\n                    var len = animationData.assets.length\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                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                      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                        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                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                  if (animationData.assets) {\n                    var i\n                    var len = animationData.assets.length\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                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                      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                        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                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i]\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties\n                    jLen = maskProps.length\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                        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                          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                  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                  if (animationData.assets) {\n                    var i\n                    var len = animationData.assets.length\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              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)) {\n                // 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\n            return moduleOb\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                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response\n                }\n                if (xhr.response && typeof xhr.response === 'object') {\n                  return xhr.response\n                }\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response)\n                }\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText)\n                }\n                return null\n              }\n\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response\n                var xhr = new XMLHttpRequest()\n                // set responseType after calling open or IE will break.\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json'\n                } catch (err) {} // eslint-disable-line no-empty\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                try {\n                  xhr.open('GET', path, true)\n                } catch (error) {\n                  xhr.open('GET', fullPath + '/' + path, true)\n                }\n                xhr.send()\n              }\n              return {\n                load: loadAsset,\n              }\n            })()\n          }\n\n          if (e.data.type === 'loadAnimation') {\n            _workerSelf.assetLoader.load(\n              e.data.path,\n              e.data.fullPath,\n              function (data) {\n                _workerSelf.dataManager.completeData(data)\n                _workerSelf.postMessage({\n                  id: e.data.id,\n                  payload: data,\n                  status: 'success',\n                })\n              },\n              function () {\n                _workerSelf.postMessage({\n                  id: e.data.id,\n                  status: 'error',\n                })\n              },\n            )\n          } else if (e.data.type === 'complete') {\n            var animation = e.data.animation\n            _workerSelf.dataManager.completeData(animation)\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(\n              e.data.path,\n              e.data.fullPath,\n              function (data) {\n                _workerSelf.postMessage({\n                  id: e.data.id,\n                  payload: data,\n                  status: 'success',\n                })\n              },\n              function () {\n                _workerSelf.postMessage({\n                  id: e.data.id,\n                  status: 'error',\n                })\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          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  const 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      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null)\n        }\n      }\n    }\n    function footageLoaded() {\n      this.loadedFootagesCount += 1\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      if (assetData.e) {\n        path = assetData.p\n      } else if (assetsPath) {\n        var imagePath = assetData.p\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1]\n        }\n        path = assetsPath + imagePath\n      } else {\n        path = originalPath\n        path += assetData.u ? assetData.u : ''\n        path += assetData.p\n      }\n      return path\n    }\n\n    function testImageLoaded(img) {\n      var _count = 0\n      var intervalId = setInterval(\n        function () {\n          var box = img.getBBox()\n          if (box.width || _count > 500) {\n            this._imageLoaded()\n            clearInterval(intervalId)\n          }\n          _count += 1\n        }.bind(this),\n        50,\n      )\n    }\n\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path)\n      var img = createNS('image')\n      if (isSafari) {\n        this.testImageLoaded(img)\n      } else {\n        img.addEventListener('load', this._imageLoaded, false)\n      }\n      img.addEventListener(\n        'error',\n        function () {\n          ob.img = proxyImage\n          this._imageLoaded()\n        }.bind(this),\n        false,\n      )\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path)\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img)\n      } else {\n        this._elementHelper.appendChild(img)\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(\n        'error',\n        function () {\n          ob.img = proxyImage\n          this._imageLoaded()\n        }.bind(this),\n        false,\n      )\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(\n        path,\n        function (footageData) {\n          ob.img = footageData\n          this._footageLoaded()\n        }.bind(this),\n        function () {\n          ob.img = {}\n          this._footageLoaded()\n        }.bind(this),\n      )\n      return ob\n    }\n\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb\n      var i\n      var len = assets.length\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      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img\n        }\n        i += 1\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\n    return ImagePreloaderFactory\n  })()\n\n  function BaseEvent() {}\n  BaseEvent.prototype = {\n    triggerEvent: function (eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName]\n        for (var i = 0; i < callbacks.length; i += 1) {\n          callbacks[i](args)\n        }\n      }\n    },\n    addEventListener: function (eventName, callback) {\n      if (!this._cbs[eventName]) {\n        this._cbs[eventName] = []\n      }\n      this._cbs[eventName].push(callback)\n\n      return function () {\n        this.removeEventListener(eventName, callback)\n      }.bind(this)\n    },\n    removeEventListener: function (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        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1)\n            i -= 1\n            len -= 1\n          }\n          i += 1\n        }\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null\n        }\n      }\n    },\n  }\n\n  const markerParser = (function () {\n    function parsePayloadLines(payload) {\n      var lines = payload.split('\\r\\n')\n      var keys = {}\n      var line\n      var keysCount = 0\n      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':')\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim()\n          keysCount += 1\n        }\n      }\n      if (keysCount === 0) {\n        throw new Error()\n      }\n      return keys\n    }\n\n    return function (_markers) {\n      var markers = []\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        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        markers.push(markerData)\n      }\n      return markers\n    }\n  })()\n\n  const 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        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            return this.compositions[i].compInterface\n          }\n          i += 1\n        }\n        return null\n      }\n\n      _thisProjectFunction.compositions = []\n      _thisProjectFunction.currentFrame = 0\n\n      _thisProjectFunction.registerComposition = registerComposition\n\n      return _thisProjectFunction\n    }\n  })()\n\n  const renderers = {}\n\n  const registerRenderer = (key, value) => {\n    renderers[key] = value\n  }\n\n  function getRenderer(key) {\n    return renderers[key]\n  }\n\n  const AnimationItem = function () {\n    this._cbs = []\n    this.name = ''\n    this.path = ''\n    this.isLoaded = false\n    this.currentFrame = 0\n    this.currentRawFrame = 0\n    this.firstFrame = 0\n    this.totalFrames = 0\n    this.frameRate = 0\n    this.frameMult = 0\n    this.playSpeed = 1\n    this.playDirection = 1\n    this.playCount = 0\n    this.animationData = {}\n    this.assets = []\n    this.isPaused = true\n    this.autoplay = false\n    this.loop = true\n    this.renderer = null\n    this.animationID = createElementID()\n    this.assetsPath = ''\n    this.timeCompleted = 0\n    this.segmentPos = 0\n    this.isSubframeEnabled = getSubframeEnabled()\n    this.segments = []\n    this._idle = true\n    this._completedLoop = false\n    this.projectInterface = ProjectInterface()\n    this.imagePreloader = new ImagePreloader()\n    this.audioController = audioControllerFactory()\n    this.markers = []\n    this.configAnimation = this.configAnimation.bind(this)\n    this.onSetupError = this.onSetupError.bind(this)\n    this.onSegmentComplete = this.onSegmentComplete.bind(this)\n    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0)\n  }\n\n  extendPrototype([BaseEvent], AnimationItem)\n\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container\n    }\n    var animType = 'svg'\n    if (params.animType) {\n      animType = params.animType\n    } else if (params.renderer) {\n      animType = params.renderer\n    }\n    const 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    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    this.autoplay = 'autoplay' in params ? params.autoplay : true\n    this.name = params.name ? params.name : ''\n    this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments')\n      ? params.autoloadSegments\n      : true\n    this.assetsPath = params.assetsPath\n    this.initialSegment = params.initialSegment\n    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory)\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      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 animationData !== 'object') {\n        animationData = JSON.parse(animationData)\n      }\n    }\n    var params = {\n      wrapper: wrapper,\n      animationData: animationData,\n    }\n    var wrapperAttributes = wrapper.attributes\n\n    params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-animation-path').value\n      : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-bm-path').value\n      : wrapperAttributes.getNamedItem('bm-path')\n      ? wrapperAttributes.getNamedItem('bm-path').value\n      : ''\n    params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-anim-type').value\n      : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-bm-type').value\n      : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('bm-type').value\n      : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-bm-renderer').value\n      : wrapperAttributes.getNamedItem('bm-renderer')\n      ? wrapperAttributes.getNamedItem('bm-renderer').value\n      : 'canvas'\n\n    var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-anim-loop').value\n      : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-bm-loop').value\n      : wrapperAttributes.getNamedItem('bm-loop')\n      ? 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    var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-anim-autoplay').value\n      : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-bm-autoplay').value\n      : wrapperAttributes.getNamedItem('bm-autoplay')\n      ? wrapperAttributes.getNamedItem('bm-autoplay').value\n      : true\n    params.autoplay = autoplay !== 'false'\n\n    params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-name').value\n      : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-bm-name').value\n      : wrapperAttributes.getNamedItem('bm-name')\n      ? wrapperAttributes.getNamedItem('bm-name').value\n      : ''\n    var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-anim-prerender').value\n      : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n      ? wrapperAttributes.getNamedItem('data-bm-prerender').value\n      : wrapperAttributes.getNamedItem('bm-prerender')\n      ? wrapperAttributes.getNamedItem('bm-prerender').value\n      : ''\n\n    if (prerender === 'false') {\n      params.prerender = false\n    }\n    this.setParams(params)\n  }\n\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op\n      this.totalFrames = Math.floor(data.op - this.animationData.ip)\n    }\n    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    for (j = 0; j < jLen; j += 1) {\n      i = 0\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j]\n          break\n        }\n        i += 1\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    if (data.assets) {\n      len = data.assets.length\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i])\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    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this)\n    }\n    this.loadNextSegment()\n  }\n\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready')\n      this.timeCompleted = this.totalFrames\n      return\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(\n      segmentPath,\n      this.includeLayers.bind(this),\n      function () {\n        this.trigger('data_failed')\n      }.bind(this),\n    )\n  }\n\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments\n    if (!segments) {\n      this.timeCompleted = this.totalFrames\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    try {\n      this.animationData = animData\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      this.renderer.configAnimation(animData)\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      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    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 (\n      !this.isLoaded &&\n      this.renderer.globalData.fontManager.isLoaded &&\n      (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') &&\n      this.imagePreloader.loadedFootages()\n    ) {\n      this.isLoaded = true\n      var expressionsPlugin = getExpressionsPlugin()\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this)\n      }\n      this.renderer.initItems()\n      setTimeout(\n        function () {\n          this.trigger('DOMLoaded')\n        }.bind(this),\n        0,\n      )\n      this.gotoFrame()\n      if (this.autoplay) {\n        this.play()\n      }\n    }\n  }\n\n  AnimationItem.prototype.resize = function () {\n    this.renderer.updateContainerSize()\n  }\n\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag\n  }\n\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted\n    }\n    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    try {\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame)\n    } catch (error) {\n      this.triggerRenderFrameError(error)\n    }\n  }\n\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return\n    }\n    if (this.isPaused === true) {\n      this.isPaused = false\n      this.trigger('_pause')\n      this.audioController.resume()\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    if (this.isPaused === false) {\n      this.isPaused = true\n      this.trigger('_play')\n      this._idle = true\n      this.trigger('_idle')\n      this.audioController.pause()\n    }\n  }\n\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return\n    }\n    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    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    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i]\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker\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    var numValue = Number(value)\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value)\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    this.pause()\n  }\n\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return\n    }\n    var numValue = Number(value)\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value)\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    this.play()\n  }\n\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return\n    }\n    var nextValue = this.currentRawFrame + value * this.frameModifier\n    var _isComplete = false\n    // 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    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        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          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    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    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      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      this.totalFrames = arr[1] - arr[0]\n      this.timeCompleted = this.totalFrames\n      this.firstFrame = arr[0]\n      this.setCurrentRawFrameValue(0.001 + offset)\n    }\n    this.trigger('segmentStart')\n  }\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1\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    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    if (typeof arr[0] === 'object') {\n      var i\n      var len = arr.length\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i])\n      }\n    } else {\n      this.segments.push(arr)\n    }\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0)\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    if (forceFlag) {\n      this.checkSegments(0)\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    return false\n  }\n\n  AnimationItem.prototype.destroy = function (name) {\n    if ((name && this.name !== name) || !this.renderer) {\n      return\n    }\n    this.renderer.destroy()\n    this.imagePreloader.destroy()\n    this.trigger('destroy')\n    this._cbs = null\n    this.onEnterFrame = null\n    this.onLoopComplete = null\n    this.onComplete = null\n    this.onSegmentStart = null\n    this.onDestroy = null\n    this.renderer = null\n    this.renderer = null\n    this.imagePreloader = null\n    this.projectInterface = null\n  }\n\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value\n    this.gotoFrame()\n  }\n\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val\n    this.updaFrameModifier()\n  }\n\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1\n    this.updaFrameModifier()\n  }\n\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return\n    }\n    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    this.audioController.mute()\n  }\n\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return\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    if (assetData.e) {\n      path = assetData.p\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1]\n      }\n      path = this.assetsPath + imagePath\n    } else {\n      path = this.path\n      path += assetData.u ? assetData.u : ''\n      path += assetData.p\n    }\n    return path\n  }\n\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0\n    var len = this.assets.length\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i]\n      }\n      i += 1\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) {\n      // 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        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        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult))\n          break\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult))\n          break\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames))\n          break\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this))\n          break\n        default:\n          this.triggerEvent(name)\n      }\n    }\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult))\n    }\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult))\n    }\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult))\n    }\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames))\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  const 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      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1)\n          i -= 1\n          len -= 1\n          if (!animItem.isPaused) {\n            subtractPlayingCount()\n          }\n        }\n        i += 1\n      }\n    }\n\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null\n      }\n      var i = 0\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation\n        }\n        i += 1\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      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation)\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({ elem: element, animation: animItem })\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      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      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      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation)\n      }\n    }\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime\n      var i\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime)\n      }\n      initTime = nowTime\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      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      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      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation)\n      }\n    }\n\n    function togglePause(animation) {\n      var i\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      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(\n        [].slice.call(document.getElementsByClassName('lottie')),\n        [].slice.call(document.getElementsByClassName('bodymovin')),\n      )\n      var i\n      var lenAnims = animElements.length\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer)\n        }\n        registerAnimation(animElements[i], animationData)\n      }\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg'\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      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      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      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation)\n      }\n    }\n\n    function unmute(animation) {\n      var i\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\n    // moduleOb.start = start;\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  const BezierFactory = (function () {\n    /**\n     * BezierEasing - use bezier curve for transition easing function\n     * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n     *\n     * Credits: is based on Firefox's nsSMILKeySpline.cpp\n     * Usage:\n     * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\n     * spline.get(x) => returns the easing value | x must be in [0, 1] range\n     *\n     */\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      if (beziers[str]) {\n        return beziers[str]\n      }\n      var bezEasing = new BezierEasing([a, b, c, d])\n      beziers[str] = bezEasing\n      return bezEasing\n    }\n\n    // These values are established by empiricism with tests (tradeoff: performance VS precision)\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\n    var kSplineTableSize = 11\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0)\n\n    var float32ArraySupported = typeof Float32Array === 'function'\n\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1\n    }\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1\n    }\n    function C(aA1) {\n      return 3.0 * aA1\n    }\n\n    // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT\n    }\n\n    // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\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      do {\n        currentT = aA + (aB - aA) / 2.0\n        currentX = calcBezier(currentT, mX1, mX2) - aX\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      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      return aGuessT\n    }\n\n    /**\n     * points is an array of [ mX1, mY1, mX2, mY2 ]\n     */\n    function BezierEasing(points) {\n      this._p = points\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize)\n      this._precomputed = false\n\n      this.get = this.get.bind(this)\n    }\n\n    BezierEasing.prototype = {\n      get: function (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        if (x === 0) return 0\n        if (x === 1) return 1\n        return calcBezier(this._getTForX(x), mY1, mY2)\n      },\n\n      // Private part\n\n      _precompute: function () {\n        var mX1 = this._p[0],\n          mY1 = this._p[1],\n          mX2 = this._p[2],\n          mY2 = this._p[3]\n        this._precomputed = true\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues()\n        }\n      },\n\n      _calcSampleValues: function () {\n        var mX1 = this._p[0],\n          mX2 = this._p[2]\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2)\n        }\n      },\n\n      /**\n       * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\n       */\n      _getTForX: function (aX) {\n        var mX1 = this._p[0],\n          mX2 = this._p[2],\n          mSampleValues = this._mSampleValues\n\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        --currentSample\n\n        // Interpolate to provide an initial guess for t\n        var dist =\n          (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample])\n        var guessForT = intervalStart + dist * kSampleStepSize\n\n        var initialSlope = getSlope(guessForT, mX1, mX2)\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2)\n        }\n        if (initialSlope === 0.0) {\n          return guessForT\n        }\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2)\n      },\n    }\n\n    return ob\n  })()\n\n  const pooling = (function () {\n    function double(arr) {\n      return arr.concat(createSizedArray(arr.length))\n    }\n\n    return {\n      double: double,\n    }\n  })()\n\n  const poolFactory = (function () {\n    return function (initialLength, _create, _release) {\n      var _length = 0\n      var _maxLength = initialLength\n      var pool = createSizedArray(_maxLength)\n\n      var ob = {\n        newElement: newElement,\n        release: release,\n      }\n\n      function newElement() {\n        var element\n        if (_length) {\n          _length -= 1\n          element = pool[_length]\n        } else {\n          element = _create()\n        }\n        return element\n      }\n\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling.double(pool)\n          _maxLength *= 2\n        }\n        if (_release) {\n          _release(element)\n        }\n        pool[_length] = element\n        _length += 1\n      }\n\n      return ob\n    }\n  })()\n\n  const bezierLengthPool = (function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments()),\n      }\n    }\n    return poolFactory(8, create)\n  })()\n\n  const 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      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i])\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      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      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      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        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1)\n          ptDistance = 0\n          for (i = 0; i < len; i += 1) {\n            ptCoord =\n              bmPow(1 - perc, 3) * pt1[i] +\n              3 * bmPow(1 - perc, 2) * perc * pt3[i] +\n              3 * (1 - perc) * bmPow(perc, 2) * pt4[i] +\n              bmPow(perc, 3) * pt2[i]\n            point[i] = ptCoord\n            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2)\n            }\n            lastPoint[i] = point[i]\n          }\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance)\n            addedLength += ptDistance\n          }\n          lengthData.percents[k] = perc\n          lengthData.lengths[k] = addedLength\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      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      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0])\n        totalLength += lengths[i].addedLength\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\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (\n          pt1[0] +\n          '_' +\n          pt1[1] +\n          '_' +\n          pt2[0] +\n          '_' +\n          pt2[1] +\n          '_' +\n          pt3[0] +\n          '_' +\n          pt3[1] +\n          '_' +\n          pt4[0] +\n          '_' +\n          pt4[1]\n        ).replace(/\\./g, 'p')\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          if (\n            pt1.length === 2 &&\n            (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) &&\n            pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) &&\n            pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])\n          ) {\n            curveSegments = 2\n          }\n          var bezierData = new BezierData(curveSegments)\n          len = pt3.length\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len)\n            perc = k / (curveSegments - 1)\n            ptDistance = 0\n            for (i = 0; i < len; i += 1) {\n              ptCoord =\n                bmPow(1 - perc, 3) * pt1[i] +\n                3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) +\n                3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) +\n                bmPow(perc, 3) * pt2[i]\n              point[i] = ptCoord\n              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2)\n              }\n            }\n            ptDistance = bmSqrt(ptDistance)\n            addedLength += ptDistance\n            bezierData.points[k] = new PointData(ptDistance, point)\n            lastPoint = point\n          }\n          bezierData.segmentLength = addedLength\n          storedData[bezierName] = bezierData\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      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos]\n      }\n      var dir = lengths[initPos] > lengthPos ? -1 : 1\n      var flag = true\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        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          flag = false\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 =\n        math.round(\n          (u1 * u1 * u1 * pt1[0] +\n            (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] +\n            (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] +\n            t1 * t1 * t1 * pt2[0]) *\n            1000,\n        ) / 1000\n      var ptY =\n        math.round(\n          (u1 * u1 * u1 * pt1[1] +\n            (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] +\n            (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] +\n            t1 * t1 * t1 * pt2[1]) *\n            1000,\n        ) / 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      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      var t0t0u0_3 = t0 * t0 * u0 * 3 // eslint-disable-line camelcase\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      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1 // eslint-disable-line camelcase\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      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1 // eslint-disable-line camelcase\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      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1 // eslint-disable-line camelcase\n      var t1t1t1 = t1 * t1 * t1\n      for (i = 0; i < len; i += 1) {\n        bezierSegmentPoints[i * 4] =\n          math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000 // eslint-disable-line camelcase\n        bezierSegmentPoints[i * 4 + 1] =\n          math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000 // eslint-disable-line camelcase\n        bezierSegmentPoints[i * 4 + 2] =\n          math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000 // eslint-disable-line camelcase\n        bezierSegmentPoints[i * 4 + 3] =\n          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  const bez = bezFunction()\n\n  const PropertyFactory = (function () {\n    var initFrame = initialDefaultFrame\n    var mathAbs = Math.abs\n\n    function interpolateValue(frameNum, caching) {\n      var offsetTime = this.offsetTime\n      var newValue\n      if (this.propType === 'multidimensional') {\n        newValue = createTypedArray('float32', this.pv.length)\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        if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n          if (keyData.h) {\n            keyData = nextKeyData\n          }\n          iterationIndex = 0\n          break\n        }\n        if (nextKeyData.t - offsetTime > frameNum) {\n          iterationIndex = i\n          break\n        }\n        if (i < len - 1) {\n          i += 1\n        } else {\n          iterationIndex = 0\n          flag = false\n        }\n      }\n      keyframeMetadata = this.keyframesMetadata[i] || {}\n\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      if (keyData.to) {\n        if (!keyframeMetadata.bezierData) {\n          keyframeMetadata.bezierData = bez.buildBezierData(\n            keyData.s,\n            nextKeyData.s || keyData.e,\n            keyData.to,\n            keyData.ti,\n          )\n        }\n        var bezierData = keyframeMetadata.bezierData\n        if (frameNum >= nextKeyTime || frameNum < keyTime) {\n          var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0\n          kLen = bezierData.points[ind].point.length\n          for (k = 0; k < kLen; k += 1) {\n            newValue[k] = bezierData.points[ind].point[k]\n          }\n          // caching._lastKeyframeIndex = -1;\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          perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime))\n          var distanceInLine = bezierData.segmentLength * perc\n\n          var segmentPerc\n          var addedLength =\n            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          while (flag) {\n            addedLength += bezierData.points[j].partialLength\n            if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n              kLen = bezierData.points[j].point.length\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] = bezierData.points[j].point[k]\n              }\n              break\n            } else if (\n              distanceInLine >= addedLength &&\n              distanceInLine < addedLength + bezierData.points[j + 1].partialLength\n            ) {\n              segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength\n              kLen = bezierData.points[j].point.length\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] =\n                  bezierData.points[j].point[k] +\n                  (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc\n              }\n              break\n            }\n            if (j < jLen - 1) {\n              j += 1\n            } else {\n              flag = false\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        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                  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                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      caching.lastIndex = iterationIndex\n      return newValue\n    }\n\n    // based on @Toji's https://github.com/toji/gl-matrix/\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\n      var omega\n      var cosom\n      var sinom\n      var scale0\n      var scale1\n\n      cosom = ax * bx + ay * by + az * bz + aw * bw\n      if (cosom < 0.0) {\n        cosom = -cosom\n        bx = -bx\n        by = -by\n        bz = -bz\n        bw = -bw\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      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\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\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      if (\n        !(\n          frameNum === this._caching.lastFrame ||\n          (this._caching.lastFrame !== initFrame &&\n            ((this._caching.lastFrame >= endTime && frameNum >= endTime) ||\n              (this._caching.lastFrame < initTime && frameNum < initTime)))\n        )\n      ) {\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      this._caching.lastFrame = frameNum\n      return this.pv\n    }\n\n    function setVValue(val) {\n      var multipliedValue\n      if (this.propType === 'unidimensional') {\n        multipliedValue = val * this.mult\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        while (i < len) {\n          multipliedValue = val[i] * this.mult\n          if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n            this.v[i] = multipliedValue\n            this._mdf = true\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      if (this.lock) {\n        this.setVValue(this.pv)\n        return\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      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue)\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      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      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      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          if (\n            (s.length === 2 &&\n              !(s[0] === e[0] && s[1] === e[1]) &&\n              bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) &&\n              bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1])) ||\n            (s.length === 3 &&\n              !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) &&\n              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]) &&\n              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          ) {\n            data.k[i].to = null\n            data.k[i].ti = null\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      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      for (i = 0; i < arrLen; i += 1) {\n        this.v[i] = initFrame\n        this.pv[i] = initFrame\n      }\n      this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray('float32', arrLen) }\n      this.addEffect = addEffect\n    }\n\n    function getProp(elem, data, type, mult, container) {\n      var p\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          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container)\n            break\n          default:\n            break\n        }\n      }\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p)\n      }\n      return p\n    }\n\n    var ob = {\n      getProp: getProp,\n    }\n    return ob\n  })()\n\n  function DynamicPropertyContainer() {}\n  DynamicPropertyContainer.prototype = {\n    addDynamicProperty: function (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 () {\n      this._mdf = false\n      var i\n      var len = this.dynamicProperties.length\n      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue()\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true\n        }\n      }\n    },\n    initDynamicPropertyContainer: function (container) {\n      this.container = container\n      this.dynamicProperties = []\n      this._mdf = false\n      this._isAnimated = false\n    },\n  }\n\n  const pointPool = (function () {\n    function create() {\n      return createTypedArray('float32', 2)\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    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    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    if (this._length >= this._maxLength) {\n      this.doubleArrayLength()\n    }\n    switch (type) {\n      case 'v':\n        arr = this.v\n        break\n      case 'i':\n        arr = this.i\n        break\n      case 'o':\n        arr = this.o\n        break\n      default:\n        arr = []\n        break\n    }\n    if (!arr[pos] || (arr[pos] && !replace)) {\n      arr[pos] = pointPool.newElement()\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    if (this.c) {\n      newPath.setTripleAt(\n        vertices[0][0],\n        vertices[0][1],\n        inPoints[0][0],\n        inPoints[0][1],\n        outPoints[0][0],\n        outPoints[0][1],\n        0,\n        false,\n      )\n      init = 1\n    }\n    var cnt = this._length - 1\n    var len = this._length\n\n    var i\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(\n        vertices[cnt][0],\n        vertices[cnt][1],\n        inPoints[cnt][0],\n        inPoints[cnt][1],\n        outPoints[cnt][0],\n        outPoints[cnt][1],\n        i,\n        false,\n      )\n      cnt -= 1\n    }\n    return newPath\n  }\n\n  const shapePool = (function () {\n    function create() {\n      return new ShapePath()\n    }\n\n    function release(shapePath) {\n      var len = shapePath._length\n      var i\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      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      return cloned\n    }\n\n    var factory = poolFactory(4, create, release)\n    factory.clone = clone\n\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    this.shapes[this._length] = shapeData\n    this._length += 1\n  }\n\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i])\n    }\n    this._length = 0\n  }\n\n  const shapeCollectionPool = (function () {\n    var ob = {\n      newShapeCollection: newShapeCollection,\n      release: release,\n    }\n\n    var _length = 0\n    var _maxLength = 4\n    var pool = createSizedArray(_maxLength)\n\n    function newShapeCollection() {\n      var shapeCollection\n      if (_length) {\n        _length -= 1\n        shapeCollection = pool[_length]\n      } else {\n        shapeCollection = new ShapeCollection()\n      }\n      return shapeCollection\n    }\n\n    function release(shapeCollection) {\n      var i\n      var len = shapeCollection._length\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i])\n      }\n      shapeCollection._length = 0\n\n      if (_length === _maxLength) {\n        pool = pooling.double(pool)\n        _maxLength *= 2\n      }\n      pool[_length] = shapeCollection\n      _length += 1\n    }\n\n    return ob\n  })()\n\n  const 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      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){\n                keyPropS = kf[kf.length - 1].s[0];\n            }else{\n                keyPropS = kf[kf.length - 2].e[0];\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        while (flag) {\n          keyData = kf[i]\n          nextKeyData = kf[i + 1]\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break\n          }\n          if (i < len - 1) {\n            i += 1\n          } else {\n            flag = false\n          }\n        }\n        keyframeMetadata = this.keyframesMetadata[i] || {}\n        isHold = keyData.h === 1\n        iterationIndex = i\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            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            perc = fnc(\n              (frameNum - (keyData.t - this.offsetTime)) /\n                (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)),\n            )\n          }\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0]\n        }\n        keyPropS = keyData.s[0]\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      if (\n        !(\n          lastFrame !== initFrame &&\n          ((lastFrame < initTime && frameNum < initTime) || (lastFrame > endTime && frameNum > endTime))\n        )\n      ) {\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      var i\n      var len = shape1._length\n      for (i = 0; i < len; i += 1) {\n        if (\n          shape1.v[i][0] !== shape2.v[i][0] ||\n          shape1.v[i][1] !== shape2.v[i][1] ||\n          shape1.o[i][0] !== shape2.o[i][0] ||\n          shape1.o[i][1] !== shape2.o[i][1] ||\n          shape1.i[i][0] !== shape2.i[i][0] ||\n          shape1.i[i][1] !== shape2.i[i][1]\n        ) {\n          return false\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      if (!this.effectsSequence.length) {\n        this._mdf = false\n        return\n      }\n      if (this.lock) {\n        this.setVValue(this.pv)\n        return\n      }\n      this.lock = true\n      this._mdf = false\n      var finalValue\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      var i\n      var len = this.effectsSequence.length\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue)\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 = { lastFrame: initFrame, lastIndex: 0 }\n      this.effectsSequence = [interpolateShapeCurrentTime.bind(this)]\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        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 () {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return\n          }\n          this.frameId = this.elem.globalData.frameId\n          this.iterateDynamicProperties()\n\n          if (this._mdf) {\n            this.convertEllToPath()\n          }\n        },\n        convertEllToPath: function () {\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          var _cw = this.d !== 3\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\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory)\n\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        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        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        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 () {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return\n          }\n          this.frameId = this.elem.globalData.frameId\n          this.iterateDynamicProperties()\n          if (this._mdf) {\n            this.convertToPath()\n          }\n        },\n        convertStarToPath: function () {\n          var numPts = Math.floor(this.pt.v) * 2\n          var angle = (Math.PI * 2) / numPts\n          /* this.v.v.length = numPts;\n                this.v.i.length = numPts;\n                this.v.o.length = numPts; */\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          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(\n              x,\n              y,\n              x - ox * perimSegment * roundness * dir,\n              y - oy * perimSegment * roundness * dir,\n              x + ox * perimSegment * roundness * dir,\n              y + oy * perimSegment * roundness * dir,\n              i,\n              true,\n            )\n\n            /* this.v.v[i] = [x,y];\n                    this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\n                    this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\n                    this.v._length = numPts; */\n            longFlag = !longFlag\n            currentAng += angle * dir\n          }\n        },\n        convertPolygonToPath: function () {\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          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(\n              x,\n              y,\n              x - ox * perimSegment * roundness * dir,\n              y - oy * perimSegment * roundness * dir,\n              x + ox * perimSegment * roundness * dir,\n              y + oy * perimSegment * roundness * dir,\n              i,\n              true,\n            )\n            currentAng += angle * dir\n          }\n          this.paths.length = 0\n          this.paths[0] = this.v\n        },\n      }\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory)\n\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        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 () {\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            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            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 () {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return\n          }\n          this.frameId = this.elem.globalData.frameId\n          this.iterateDynamicProperties()\n          if (this._mdf) {\n            this.convertRectToPath()\n          }\n        },\n        reset: resetShape,\n      }\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory)\n\n      return RectShapePropertyFactory\n    })()\n\n    function getShapeProp(elem, data, type) {\n      var prop\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks\n        var keys = dataProp.k\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      if (prop.k) {\n        elem.addDynamicProperty(prop)\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  /*!\n Transformation Matrix v2.0\n (c) Epistemex 2014-2015\n www.epistemex.com\n By Ken Fyrstenberg\n Contributions by leeoniya.\n License: MIT, header required.\n */\n\n  /**\n   * 2D transformation matrix object initialized with identity matrix.\n   *\n   * The matrix can synchronize a canvas context by supplying the context\n   * as an argument, or later apply current absolute transform to an\n   * existing context.\n   *\n   * All values are handled as floating point values.\n   *\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\n   * @prop {number} a - scale x\n   * @prop {number} b - shear y\n   * @prop {number} c - shear x\n   * @prop {number} d - scale y\n   * @prop {number} e - translate x\n   * @prop {number} f - translate y\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\n   * @constructor\n   */\n\n  const 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      var mCos = _cos(angle)\n      var mSin = _sin(angle)\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      var mCos = _cos(angle)\n      var mSin = _sin(angle)\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      var mCos = _cos(angle)\n      var mSin = _sin(angle)\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      var mCos = _cos(angle)\n      var mSin = _sin(angle)\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      var mSin = _sin(angle)\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n        ._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n        ._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)\n      // 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      if (sx === 1 && sy === 1 && sz === 1) {\n        return this\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      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      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 (\n        a2 === 1 &&\n        b2 === 0 &&\n        c2 === 0 &&\n        d2 === 0 &&\n        e2 === 0 &&\n        f2 === 1 &&\n        g2 === 0 &&\n        h2 === 0 &&\n        i2 === 0 &&\n        j2 === 0 &&\n        k2 === 1 &&\n        l2 === 0\n      ) {\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\n      /* matrix order (canvas compatible):\n       * ace\n       * bdf\n       * 001\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\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\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\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\n      this._identityCalculated = false\n      return this\n    }\n\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(\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        )\n        this._identityCalculated = true\n      }\n      return this._identity\n    }\n\n    function equals(matr) {\n      var i = 0\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false\n        }\n        i += 1\n      }\n      return true\n    }\n\n    function clone(matr) {\n      var i\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i]\n      }\n      return matr\n    }\n\n    function cloneFromProps(props) {\n      var i\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 {\n         x: x * me.a + y * me.c + me.e,\n         y: x * me.b + y * me.d + me.f\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    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13]\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      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i])\n      }\n      return retPts\n    }\n\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6)\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      return arr\n    }\n\n    function applyToPointArray(x, y, z) {\n      var arr\n      if (this.isIdentity()) {\n        arr = [x, y, z]\n      } else {\n        arr = [\n          x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n          x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n          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      var _p = this.props\n      return (\n        Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 +\n        ',' +\n        Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100\n      )\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      /* if(this.isIdentity()) {\n            return '';\n        } */\n      var i = 0\n      var props = this.props\n      var cssValue = 'matrix3d('\n      var v = 10000\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v\n        cssValue += i === 15 ? ')' : ','\n        i += 1\n      }\n      return cssValue\n    }\n\n    function roundMatrixProperty(val) {\n      var v = 10000\n      if ((val < 0.000001 && val > 0) || (val > -0.000001 && val < 0)) {\n        return _rnd(val * v) / v\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      /* if(this.isIdentity()) {\n            return '';\n        } */\n      var props = this.props\n      var _a = roundMatrixProperty(props[0])\n      var _b = roundMatrixProperty(props[1])\n      var _c = roundMatrixProperty(props[4])\n      var _d = roundMatrixProperty(props[5])\n      var _e = roundMatrixProperty(props[12])\n      var _f = roundMatrixProperty(props[13])\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')'\n    }\n\n    return function () {\n      this.reset = reset\n      this.rotate = rotate\n      this.rotateX = rotateX\n      this.rotateY = rotateY\n      this.rotateZ = rotateZ\n      this.skew = skew\n      this.skewFromAxis = skewFromAxis\n      this.shear = shear\n      this.scale = scale\n      this.setTransform = setTransform\n      this.translate = translate\n      this.transform = transform\n      this.applyToPoint = applyToPoint\n      this.applyToX = applyToX\n      this.applyToY = applyToY\n      this.applyToZ = applyToZ\n      this.applyToPointArray = applyToPointArray\n      this.applyToTriplePoints = applyToTriplePoints\n      this.applyToPointStringified = applyToPointStringified\n      this.toCSS = toCSS\n      this.to2dCSS = to2dCSS\n      this.clone = clone\n      this.cloneFromProps = cloneFromProps\n      this.equals = equals\n      this.inversePoints = inversePoints\n      this.inversePoint = inversePoint\n      this.getInverseMatrix = getInverseMatrix\n      this._t = this.transform\n      this.isIdentity = isIdentity\n      this._identity = true\n      this._identityCalculated = false\n\n      this.props = createTypedArray('float32', 16)\n      this.reset()\n    }\n  })()\n\n  const 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    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        default:\n        case 'medium':\n          setDefaultCurveSegments(50)\n          break\n        case 'low':\n          setDefaultCurveSegments(10)\n          break\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value)\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      case 'shapePropertyFactory':\n        return ShapePropertyFactory\n      case 'matrix':\n        return Matrix\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\n  // lottie.start = start;\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 = '[[BM_VERSION]]'\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    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=')\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1])\n      }\n    }\n    return null\n  }\n  var queryString = ''\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    renderer = getQueryVariable('renderer')\n  }\n  var readyStateCheckInterval = setInterval(checkReady, 100)\n\n  // this adds bodymovin to the window object for backwards compatibility\n  try {\n    if (\n      !(typeof exports === 'object' && typeof module !== 'undefined') &&\n      !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie\n    }\n  } catch (err) {\n    //\n  }\n\n  const 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  ShapeModifier.prototype.initModifierProperties = function () {}\n  ShapeModifier.prototype.addShapeToModifier = function () {}\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 = { shape: data.sh, data: data, localShapeCollection: shapeCollectionPool.newShapeCollection() }\n      this.shapes.push(shapeData)\n      this.addShapeToModifier(shapeData)\n      if (this._isAnimated) {\n        data.setAsAnimated()\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    if (this.dynamicProperties.length) {\n      this.k = true\n    } else {\n      this.getValue(true)\n    }\n  }\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return\n    }\n    this.frameId = this.elem.globalData.frameId\n    this.iterateDynamicProperties()\n  }\n\n  extendPrototype([DynamicPropertyContainer], ShapeModifier)\n\n  function TrimModifier() {}\n  extendPrototype([ShapeModifier], TrimModifier)\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 =\n      !!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    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    var shapeSegments = []\n    var i\n    var len = segments.length\n    var segmentOb\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i]\n      if (\n        !(\n          segmentOb.e * totalModifierLength < addedLength ||\n          segmentOb.s * totalModifierLength > addedLength + shapeLength\n        )\n      ) {\n        var shapeS\n        var shapeE\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength\n        }\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength\n        }\n        shapeSegments.push([shapeS, shapeE])\n      }\n    }\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0])\n    }\n    return shapeSegments\n  }\n\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i\n    var len = pathsData.length\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i])\n    }\n    pathsData.length = 0\n    return pathsData\n  }\n\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s\n    var e\n    if (this._mdf || _isFirstFrame) {\n      var o = (this.o.v % 360) / 360\n      if (o < 0) {\n        o += 1\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      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      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    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        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      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]\n        // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\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          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData)\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            shapeData.totalShapeLength = totalShapeLength\n            shapeData.pathsData = pathsData\n          }\n\n          totalModifierLength += totalShapeLength\n          shapeData.shape._mdf = true\n        }\n      }\n      var shapeS = s\n      var shapeE = e\n      var addedLength = 0\n      var edges\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i]\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection\n          localShapeCollection.releaseShapes()\n          // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\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          jLen = edges.length\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0]\n            shapeE = edges[j][1]\n            segments.length = 0\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            var newShapesData = this.addShapes(shapeData, segments[0])\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                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              this.addPaths(newShapesData, localShapeCollection)\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    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    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos)\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    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos)\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    if (!shapePath) {\n      shapePath = shapePool.newElement()\n      segmentCount = 0\n      initPos = 0\n    } else {\n      segmentCount = shapePath._length\n      initPos = shapePath._length\n    }\n    shapes.push(shapePath)\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      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1]\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(\n              shapePaths[i].v[j - 1],\n              shapePaths[i].o[j - 1],\n              shapePaths[i].i[j],\n              shapePaths[i].v[j],\n              shapePath,\n              segmentCount,\n              newShape,\n            )\n            newShape = false\n          } else {\n            segment = bez.getNewSegment(\n              shapePaths[i].v[j - 1],\n              shapePaths[i].v[j],\n              shapePaths[i].o[j - 1],\n              shapePaths[i].i[j],\n              (shapeSegment.s - addedLength) / currentLengthData.addedLength,\n              (shapeSegment.e - addedLength) / currentLengthData.addedLength,\n              lengths[j - 1],\n            )\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape)\n            // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n            newShape = false\n            shapePath.c = false\n          }\n          addedLength += currentLengthData.addedLength\n          segmentCount += 1\n        }\n      }\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1]\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(\n              shapePaths[i].v[j - 1],\n              shapePaths[i].o[j - 1],\n              shapePaths[i].i[0],\n              shapePaths[i].v[0],\n              shapePath,\n              segmentCount,\n              newShape,\n            )\n            newShape = false\n          } else {\n            segment = bez.getNewSegment(\n              shapePaths[i].v[j - 1],\n              shapePaths[i].v[0],\n              shapePaths[i].o[j - 1],\n              shapePaths[i].i[0],\n              (shapeSegment.s - addedLength) / segmentLength,\n              (shapeSegment.e - addedLength) / segmentLength,\n              lengths[j - 1],\n            )\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape)\n            // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n            newShape = false\n            shapePath.c = false\n          }\n        } else {\n          shapePath.c = false\n        }\n        addedLength += currentLengthData.addedLength\n        segmentCount += 1\n      }\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos)\n        shapePath.setXYAt(\n          shapePath.v[shapePath._length - 1][0],\n          shapePath.v[shapePath._length - 1][1],\n          'o',\n          shapePath._length - 1,\n        )\n      }\n      if (addedLength > shapeSegment.e) {\n        break\n      }\n      if (i < len - 1) {\n        shapePath = shapePool.newElement()\n        newShape = true\n        shapes.push(shapePath)\n        segmentCount = 0\n      }\n    }\n    return shapes\n  }\n\n  function PuckerAndBloatModifier() {}\n  extendPrototype([ShapeModifier], PuckerAndBloatModifier)\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    for (i = 0; i < pathLength; i += 1) {\n      centerPoint[0] += path.v[i][0]\n      centerPoint[1] += path.v[i][1]\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    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    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      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]\n        localShapeCollection = shapeData.localShapeCollection\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          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount))\n          }\n        }\n        shapeData.shape.paths = shapeData.localShapeCollection\n      }\n    }\n    if (!this.dynamicProperties.length) {\n      this._mdf = false\n    }\n  }\n\n  const 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      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2])\n      }\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2])\n      }\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v)\n      }\n      if (this.r) {\n        mat.rotate(-this.r.v)\n      } else {\n        mat\n          .rotateZ(-this.rz.v)\n          .rotateY(this.ry.v)\n          .rotateX(this.rx.v)\n          .rotateZ(-this.or.v[2])\n          .rotateY(this.or.v[1])\n          .rotateX(this.or.v[0])\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    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return\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        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2])\n        }\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2])\n        }\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v)\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\n            .rotateZ(-this.rz.v)\n            .rotateY(this.ry.v)\n            .rotateX(this.rx.v)\n            .rotateZ(-this.or.v[2])\n            .rotateY(this.or.v[1])\n            .rotateX(this.or.v[0])\n        }\n        if (this.autoOriented) {\n          var v1\n          var v2\n          frameRate = this.elem.globalData.frameRate\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 (\n              this.p._caching.lastFrame + this.p.offsetTime >=\n              this.p.keyframes[this.p.keyframes.length - 1].t\n            ) {\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(\n                (this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate,\n                this.p.offsetTime,\n              )\n            }\n          } else if (\n            this.px &&\n            this.px.keyframes &&\n            this.py.keyframes &&\n            this.px.getValueAtTime &&\n            this.py.getValueAtTime\n          ) {\n            v1 = []\n            v2 = []\n            var px = this.px\n            var py = this.py\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          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]))\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      this.frameId = this.elem.globalData.frameId\n    }\n\n    function precalculateMatrix() {\n      if (!this.a.k) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2])\n        this.appliedTransformations = 1\n      } else {\n        return\n      }\n      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      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      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v)\n          this.appliedTransformations = 4\n        }\n      } else if (\n        !this.rz.effectsSequence.length &&\n        !this.ry.effectsSequence.length &&\n        !this.rx.effectsSequence.length &&\n        !this.or.effectsSequence.length\n      ) {\n        this.pre\n          .rotateZ(-this.rz.v)\n          .rotateY(this.ry.v)\n          .rotateX(this.rx.v)\n          .rotateZ(-this.or.v[2])\n          .rotateY(this.or.v[1])\n          .rotateX(this.or.v[0])\n        this.appliedTransformations = 4\n      }\n    }\n\n    function autoOrient() {\n      //\n      // var prevP = this.getValueAtTime();\n    }\n\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop)\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()\n      // Precalculated matrix with non animated properties\n      this.pre = new Matrix()\n      this.appliedTransformations = 0\n      this.initDynamicPropertyContainer(container || elem)\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        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 || { k: [0, 0, 0] }, 1, 0, this)\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        if (data.or.k[0].ti) {\n          var i\n          var len = data.or.k.length\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        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this)\n        // sh Indicates it needs to be capped between -180 and 180\n        this.or.sh = true\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this)\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      this.a = PropertyFactory.getProp(elem, data.a || { k: [0, 0, 0] }, 1, 0, this)\n      this.s = PropertyFactory.getProp(elem, data.s || { k: [100, 100, 100] }, 1, 0.01, this)\n      // 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      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem)\n      } else {\n        this.o = { _mdf: false, v: 1 }\n      }\n      this._isDirty = true\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\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  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    if (!this.dynamicProperties.length) {\n      this.getValue(true)\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    while (pos > 0) {\n      pos -= 1\n      // this._elements.unshift(arr.splice(pos,1)[0]);\n      this._elements.unshift(arr[pos])\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    for (i = 0; i < len; i += 1) {\n      elements[i]._processed = false\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    for (i = 0; i < len; i += 1) {\n      elements[i]._render = renderFlag\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    if (this._mdf || _isFirstFrame) {\n      var copies = Math.ceil(this.c.v)\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: { a: 0, ix: 1, k: [0, 0] },\n            nm: 'Transform',\n            o: { a: 0, ix: 7, k: 100 },\n            p: { a: 0, ix: 2, k: [0, 0] },\n            r: {\n              a: 1,\n              ix: 6,\n              k: [\n                { s: 0, e: 0, t: 0 },\n                { s: 0, e: 0, t: 1 },\n              ],\n            },\n            s: { a: 0, ix: 3, k: [100, 100] },\n            sa: { a: 0, ix: 5, k: 0 },\n            sk: { a: 0, ix: 4, k: 0 },\n            ty: 'tr',\n          })\n\n          this.arr.splice(0, 0, group)\n          this._groups.splice(0, 0, group)\n          this._currentCopies += 1\n        }\n        this.elem.reloadShapes()\n        hasReloaded = true\n      }\n      cont = 0\n      var renderFlag\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        if (!renderFlag) {\n          var elems = this.elemsData[i].it\n          var transformData = elems[elems.length - 1]\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        cont += 1\n      }\n\n      this._currentCopies = copies\n      /// /\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        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        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true)\n          iteration -= offsetModulo\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      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 =\n          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          this.matrix.transform(\n            rProps[0],\n            rProps[1],\n            rProps[2],\n            rProps[3],\n            rProps[4],\n            rProps[5],\n            rProps[6],\n            rProps[7],\n            rProps[8],\n            rProps[9],\n            rProps[10],\n            rProps[11],\n            rProps[12],\n            rProps[13],\n            rProps[14],\n            rProps[15],\n          )\n          this.matrix.transform(\n            sProps[0],\n            sProps[1],\n            sProps[2],\n            sProps[3],\n            sProps[4],\n            sProps[5],\n            sProps[6],\n            sProps[7],\n            sProps[8],\n            sProps[9],\n            sProps[10],\n            sProps[11],\n            sProps[12],\n            sProps[13],\n            sProps[14],\n            sProps[15],\n          )\n          this.matrix.transform(\n            pProps[0],\n            pProps[1],\n            pProps[2],\n            pProps[3],\n            pProps[4],\n            pProps[5],\n            pProps[6],\n            pProps[7],\n            pProps[8],\n            pProps[9],\n            pProps[10],\n            pProps[11],\n            pProps[12],\n            pProps[13],\n            pProps[14],\n            pProps[15],\n          )\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j]\n          }\n          this.matrix.reset()\n        } else {\n          this.matrix.reset()\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j]\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      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    return hasReloaded\n  }\n\n  RepeaterModifier.prototype.addShape = function () {}\n\n  function RoundCornersModifier() {}\n  extendPrototype([ShapeModifier], RoundCornersModifier)\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    for (i = 0; i < len; i += 1) {\n      currentV = path.v[i]\n      currentO = path.o[i]\n      currentI = path.i[i]\n      if (\n        currentV[0] === currentO[0] &&\n        currentV[1] === currentO[1] &&\n        currentV[0] === currentI[0] &&\n        currentV[1] === currentI[1]\n      ) {\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;\n                clonedPath.o[index] = currentO;\n                clonedPath.i[index] = currentI; */\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          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          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(\n          path.v[i][0],\n          path.v[i][1],\n          path.o[i][0],\n          path.o[i][1],\n          path.i[i][0],\n          path.i[i][1],\n          index,\n        )\n        index += 1\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      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]\n        localShapeCollection = shapeData.localShapeCollection\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          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], rd))\n          }\n        }\n        shapeData.shape.paths = shapeData.localShapeCollection\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\n    var fWeight = 'normal'\n    var fStyle = 'normal'\n    var len = styles.length\n    var styleName\n    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase()\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic'\n          break\n        case 'bold':\n          fWeight = '700'\n          break\n        case 'black':\n          fWeight = '900'\n          break\n        case 'medium':\n          fWeight = '500'\n          break\n        case 'regular':\n        case 'normal':\n          fWeight = '400'\n          break\n        case 'light':\n        case 'thin':\n          fWeight = '200'\n          break\n        default:\n          break\n      }\n    }\n\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight,\n    }\n  }\n\n  const 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 = []\n    // Hindi characters\n    combinedCharacters = combinedCharacters.concat([\n      2304,\n      2305,\n      2306,\n      2307,\n      2362,\n      2363,\n      2364,\n      2364,\n      2366,\n      2367,\n      2368,\n      2369,\n      2370,\n      2371,\n      2372,\n      2373,\n      2374,\n      2375,\n      2376,\n      2377,\n      2378,\n      2379,\n      2380,\n      2381,\n      2382,\n      2383,\n      2387,\n      2388,\n      2389,\n      2390,\n      2391,\n      2402,\n      2403,\n    ])\n\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff']\n\n    var zeroWidthJoiner = [65039, 8205]\n\n    function trimFontOptions(font) {\n      var familyArray = font.split(',')\n      var i\n      var len = familyArray.length\n      var enabledFamilies = []\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i])\n        }\n      }\n      return enabledFamilies.join(',')\n    }\n\n    function setUpNode(font, family) {\n      var parentNode = createTag('span')\n      // Node is invisible to screen readers.\n      parentNode.setAttribute('aria-hidden', true)\n      parentNode.style.fontFamily = family\n      var node = createTag('span')\n      // Characters that vary significantly among different fonts\n      node.innerText = 'giItT1WQy@!-/#'\n      // Visible - so we can measure it - but not on the screen\n      parentNode.style.position = 'absolute'\n      parentNode.style.left = '-10000px'\n      parentNode.style.top = '-10000px'\n      // Large font size makes even subtle changes obvious\n      parentNode.style.fontSize = '300px'\n      // Reset any font properties\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)\n\n      // Remember width with no applied web font\n      var width = node.offsetWidth\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family\n      return { node: node, w: width, parent: parentNode }\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      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          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            if (node.offsetWidth !== w) {\n              loadedCount -= 1\n              this.fonts[i].loaded = true\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      if (engine === 'svg') {\n        var tHelper = createNS('text')\n        tHelper.style.fontSize = '100px'\n        // tHelper.style.fontFamily = fontData.fFamily;\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        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit'\n          tHelper.setAttribute('class', fontData.fClass)\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily\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      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text\n          return helper.getComputedTextLength()\n        }\n        return helper.measureText(text).width\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      if (this.chars) {\n        this.isLoaded = true\n        this.fonts = fontData.list\n        return\n      }\n      if (!document.body) {\n        this.isLoaded = true\n        fontData.list.forEach((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      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        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(\n            'style[f-forigin=\"p\"][f-family=\"' +\n              fontArr[i].fFamily +\n              '\"], style[f-origin=\"3\"][f-family=\"' +\n              fontArr[i].fFamily +\n              '\"]',\n          )\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 =\n              '@font-face {font-family: ' +\n              fontArr[i].fFamily +\n              \"; font-style: normal; src: url('\" +\n              fontArr[i].fPath +\n              \"');}\"\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        fontArr[i].helper = createHelper(fontArr[i], defs)\n        fontArr[i].cache = {}\n        this.fonts.push(fontArr[i])\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      if (!this.chars) {\n        this.chars = []\n      }\n      var i\n      var len = chars.length\n      var j\n      var jLen = this.chars.length\n      var found\n      for (i = 0; i < len; i += 1) {\n        j = 0\n        found = false\n        while (j < jLen) {\n          if (\n            this.chars[j].style === chars[i].style &&\n            this.chars[j].fFamily === chars[i].fFamily &&\n            this.chars[j].ch === chars[i].ch\n          ) {\n            found = true\n          }\n          j += 1\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      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        i += 1\n      }\n      if (\n        ((typeof char === 'string' && char.charCodeAt(0) !== 13) || !char) &&\n        console &&\n        console.warn && // eslint-disable-line no-console\n        !this._warned\n      ) {\n        this._warned = true\n        console.warn('Missing character from exported characters list: ', char, style, font) // eslint-disable-line no-console\n      }\n      return emptyChar\n    }\n\n    function measureText(char, fontName, size) {\n      var fontData = this.getFontByName(fontName)\n      var index = char.charCodeAt(0)\n      if (!fontData.cache[index + 1]) {\n        var tHelper = fontData.helper\n        if (char === ' ') {\n          var doubleSize = tHelper.measureText('|' + char + '|')\n          var singleSize = tHelper.measureText('||')\n          fontData.cache[index + 1] = (doubleSize - singleSize) / 100\n        } else {\n          fontData.cache[index + 1] = tHelper.measureText(char) / 100\n        }\n      }\n      return fontData.cache[index + 1] * size\n    }\n\n    function getFontByName(name) {\n      var i = 0\n      var len = this.fonts.length\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i]\n        }\n        i += 1\n      }\n      return this.fonts[0]\n    }\n\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16)\n      return surrogateModifiers.indexOf(sum) !== -1\n    }\n\n    function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n      if (!secondCharCode) {\n        return firstCharCode === zeroWidthJoiner[1]\n      }\n      return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1]\n    }\n\n    function isCombinedCharacter(char) {\n      return combinedCharacters.indexOf(char) !== -1\n    }\n\n    function setIsLoaded() {\n      this.isLoaded = true\n    }\n\n    var Font = function () {\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    Font.isModifier = isModifier\n    Font.isZeroWidthJoiner = isZeroWidthJoiner\n    Font.isCombinedCharacter = isCombinedCharacter\n\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\n    Font.prototype = fontPrototype\n\n    return Font\n  })()\n\n  function RenderableElement() {}\n\n  RenderableElement.prototype = {\n    initRenderable: function () {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false\n      // layer's display state\n      this.hidden = false\n      // If layer's transparency equals 0, it can be hidden\n      this.isTransparent = false\n      // list of animated components\n      this.renderableComponents = []\n    },\n    addRenderableComponent: function (component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component)\n      }\n    },\n    removeRenderableComponent: function (component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1)\n      }\n    },\n    prepareRenderableFrame: function (num) {\n      this.checkLayerLimits(num)\n    },\n    checkTransparency: function () {\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     * @function\n     * Initializes frame related properties.\n     *\n     * @param {number} num\n     * current frame number in Layer's time\n     *\n     */\n    checkLayerLimits: function (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 () {\n      var i\n      var len = this.renderableComponents.length\n      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame)\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\n        this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n    },\n    sourceRectAtTime: function () {\n      return {\n        top: 0,\n        left: 0,\n        width: 100,\n        height: 100,\n      }\n    },\n    getLayerSize: function () {\n      if (this.data.ty === 5) {\n        return { w: this.data.textData.width, h: this.data.textData.height }\n      }\n      return { w: this.data.width, h: this.data.height }\n    },\n  }\n\n  const MaskManagerInterface = (function () {\n    function MaskInterface(mask, data) {\n      this._mask = mask\n      this._data = data\n    }\n    Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n      get: function () {\n        if (this._mask.prop.k) {\n          this._mask.prop.getValue()\n        }\n        return this._mask.prop\n      },\n    })\n    Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n      get: function () {\n        if (this._mask.op.k) {\n          this._mask.op.getValue()\n        }\n        return this._mask.op.v * 100\n      },\n    })\n\n    var MaskManager = function (maskManager) {\n      var _masksInterfaces = createSizedArray(maskManager.viewData.length)\n      var i\n      var len = maskManager.viewData.length\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 (name) {\n        i = 0\n        while (i < len) {\n          if (maskManager.masksProperties[i].nm === name) {\n            return _masksInterfaces[i]\n          }\n          i += 1\n        }\n        return null\n      }\n      return maskFunction\n    }\n    return MaskManager\n  })()\n\n  const ExpressionPropertyInterface = (function () {\n    var defaultUnidimensionalValue = { pv: 0, v: 0, mult: 1 }\n    var defaultMultidimensionalValue = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 }\n\n    function completeProperty(expressionValue, property, type) {\n      Object.defineProperty(expressionValue, 'velocity', {\n        get: function () {\n          return property.getVelocityAtTime(property.comp.currentFrame)\n        },\n      })\n      expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0\n      expressionValue.key = function (pos) {\n        if (!expressionValue.numKeys) {\n          return 0\n        }\n        var value = ''\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        var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value) // eslint-disable-line no-new-wrappers\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      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      var mult = 1 / property.mult\n      var val = property.pv * mult\n      var expressionValue = new Number(val) // eslint-disable-line no-new-wrappers\n      expressionValue.value = val\n      completeProperty(expressionValue, property, 'unidimensional')\n\n      return function () {\n        if (property.k) {\n          property.getValue()\n        }\n        val = property.v * mult\n        if (expressionValue.value !== val) {\n          expressionValue = new Number(val) // eslint-disable-line no-new-wrappers\n          expressionValue.value = val\n          completeProperty(expressionValue, property, 'unidimensional')\n        }\n        return expressionValue\n      }\n    }\n\n    function MultidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultMultidimensionalValue\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\n      return function () {\n        if (property.k) {\n          property.getValue()\n        }\n        for (var i = 0; i < len; i += 1) {\n          arrValue[i] = property.v[i] * mult\n          expressionValue[i] = arrValue[i]\n        }\n        return expressionValue\n      }\n    }\n\n    // TODO: try to avoid using this getter\n    function defaultGetter() {\n      return defaultUnidimensionalValue\n    }\n\n    return function (property) {\n      if (!property) {\n        return defaultGetter\n      }\n      if (property.propType === 'unidimensional') {\n        return UnidimensionalPropertyInterface(property)\n      }\n      return MultidimensionalPropertyInterface(property)\n    }\n  })()\n\n  const 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          case 'rotation':\n          case 'Rotation':\n          case 'ADBE Rotation':\n          case 'ADBE Rotate Z':\n          case 10:\n            return _thisFunction.rotation\n          case 'ADBE Rotate X':\n            return _thisFunction.xRotation\n          case 'ADBE Rotate Y':\n            return _thisFunction.yRotation\n          case 'position':\n          case 'Position':\n          case 'ADBE Position':\n          case 2:\n            return _thisFunction.position\n          case 'ADBE Position_0':\n            return _thisFunction.xPosition\n          case 'ADBE Position_1':\n            return _thisFunction.yPosition\n          case 'ADBE Position_2':\n            return _thisFunction.zPosition\n          case 'anchorPoint':\n          case 'AnchorPoint':\n          case 'Anchor Point':\n          case 'ADBE AnchorPoint':\n          case 1:\n            return _thisFunction.anchorPoint\n          case 'opacity':\n          case 'Opacity':\n          case 11:\n            return _thisFunction.opacity\n          default:\n            return null\n        }\n      }\n      Object.defineProperty(_thisFunction, 'rotation', {\n        get: ExpressionPropertyInterface(transform.r || transform.rz),\n      })\n\n      Object.defineProperty(_thisFunction, 'zRotation', {\n        get: ExpressionPropertyInterface(transform.rz || transform.r),\n      })\n\n      Object.defineProperty(_thisFunction, 'xRotation', {\n        get: ExpressionPropertyInterface(transform.rx),\n      })\n\n      Object.defineProperty(_thisFunction, 'yRotation', {\n        get: ExpressionPropertyInterface(transform.ry),\n      })\n      Object.defineProperty(_thisFunction, 'scale', {\n        get: ExpressionPropertyInterface(transform.s),\n      })\n      var _px\n      var _py\n      var _pz\n      var _transformFactory\n      if (transform.p) {\n        _transformFactory = ExpressionPropertyInterface(transform.p)\n      } else {\n        _px = ExpressionPropertyInterface(transform.px)\n        _py = ExpressionPropertyInterface(transform.py)\n        if (transform.pz) {\n          _pz = ExpressionPropertyInterface(transform.pz)\n        }\n      }\n      Object.defineProperty(_thisFunction, 'position', {\n        get: function () {\n          if (transform.p) {\n            return _transformFactory()\n          }\n          return [_px(), _py(), _pz ? _pz() : 0]\n        },\n      })\n\n      Object.defineProperty(_thisFunction, 'xPosition', {\n        get: ExpressionPropertyInterface(transform.px),\n      })\n\n      Object.defineProperty(_thisFunction, 'yPosition', {\n        get: ExpressionPropertyInterface(transform.py),\n      })\n\n      Object.defineProperty(_thisFunction, 'zPosition', {\n        get: ExpressionPropertyInterface(transform.pz),\n      })\n\n      Object.defineProperty(_thisFunction, 'anchorPoint', {\n        get: ExpressionPropertyInterface(transform.a),\n      })\n\n      Object.defineProperty(_thisFunction, 'opacity', {\n        get: ExpressionPropertyInterface(transform.o),\n      })\n\n      Object.defineProperty(_thisFunction, 'skew', {\n        get: ExpressionPropertyInterface(transform.sk),\n      })\n\n      Object.defineProperty(_thisFunction, 'skewAxis', {\n        get: ExpressionPropertyInterface(transform.sa),\n      })\n\n      Object.defineProperty(_thisFunction, 'orientation', {\n        get: ExpressionPropertyInterface(transform.or),\n      })\n\n      return _thisFunction\n    }\n  })()\n\n  const LayerExpressionInterface = (function () {\n    function getMatrix(time) {\n      var toWorldMat = new Matrix()\n      if (time !== undefined) {\n        var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time)\n        propMatrix.clone(toWorldMat)\n      } else {\n        var transformMat = this._elem.finalTransform.mProp\n        transformMat.applyToMatrix(toWorldMat)\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        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix)\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        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix)\n        }\n      }\n      return matrix.inversePoint(arr)\n    }\n\n    function fromComp(arr) {\n      var toWorldMat = new Matrix()\n      toWorldMat.reset()\n      this._elem.finalTransform.mProp.applyToMatrix(toWorldMat)\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i\n        var len = this._elem.hierarchy.length\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat)\n        }\n        return toWorldMat.inversePoint(arr)\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      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          case 1:\n          case 6:\n          case 'Transform':\n          case 'transform':\n          case 'ADBE Transform Group':\n            return transformInterface\n          case 4:\n          case 'ADBE Effect Parade':\n          case 'effects':\n          case 'Effects':\n            return _thisLayerFunction.effect\n          case 'ADBE Text Properties':\n            return _thisLayerFunction.textInterface\n          default:\n            return null\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 () {\n            return elem.hierarchy.length\n          },\n        },\n        parent: {\n          get: function () {\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 () {\n            return transformInterface\n          },\n        },\n        active: {\n          get: function () {\n            return elem.isInRange\n          },\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\n      _thisLayerFunction.registerMaskInterface = _registerMaskInterface\n      _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface\n      return _thisLayerFunction\n    }\n  })()\n\n  const propertyGroupFactory = (function () {\n    return function (interfaceFunction, parentPropertyGroup) {\n      return function (val) {\n        val = val === undefined ? 1 : val\n        if (val <= 0) {\n          return interfaceFunction\n        }\n        return parentPropertyGroup(val - 1)\n      }\n    }\n  })()\n\n  const 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        if (val <= 0) {\n          return interfaceFunction\n        }\n        return propertyGroup(val - 1)\n      }\n\n      return _propertyGroup\n    }\n  })()\n\n  const 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        for (i = 0; i < len; i += 1) {\n          effectElements.push(\n            createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem),\n          )\n        }\n\n        var effects = elem.data.ef || []\n        var groupInterface = function (name) {\n          i = 0\n          len = effects.length\n          while (i < len) {\n            if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n              return effectElements[i]\n            }\n            i += 1\n          }\n          return null\n        }\n        Object.defineProperty(groupInterface, 'numProperties', {\n          get: function () {\n            return effects.length\n          },\n        })\n        return groupInterface\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        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            return effectElements[i]()\n          }\n          i += 1\n        }\n        throw new Error()\n      }\n      var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup)\n\n      var effectElements = []\n      var i\n      var len = data.ef.length\n      for (i = 0; i < len; i += 1) {\n        if (data.ef[i].ty === 5) {\n          effectElements.push(\n            createGroupInterface(\n              data.ef[i],\n              elements.effectElements[i],\n              elements.effectElements[i].propertyGroup,\n              elem,\n            ),\n          )\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 () {\n            return effectElements[0]()\n          },\n        })\n      }\n      Object.defineProperties(groupInterface, {\n        numProperties: {\n          get: function () {\n            return data.np\n          },\n        },\n        _name: { value: data.nm },\n        propertyGroup: { value: _propertyGroup },\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      function interfaceFunction() {\n        if (type === 10) {\n          return elem.comp.compInterface(element.p.v)\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  const CompExpressionInterface = (function () {\n    return function (comp) {\n      function _thisLayerFunction(name) {\n        var i = 0\n        var len = comp.layers.length\n        while (i < len) {\n          if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n            return comp.elements[i].layerInterface\n          }\n          i += 1\n        }\n        return null\n        // return {active:false};\n      }\n      Object.defineProperty(_thisLayerFunction, '_name', { value: comp.data.nm })\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  const ShapePathInterface = (function () {\n    return function pathInterfaceFactory(shape, view, propertyGroup) {\n      var prop = view.sh\n\n      function interfaceFunction(val) {\n        if (\n          val === 'Shape' ||\n          val === 'shape' ||\n          val === 'Path' ||\n          val === 'path' ||\n          val === 'ADBE Vector Shape' ||\n          val === 2\n        ) {\n          return interfaceFunction.path\n        }\n        return null\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\n      prop.setGroupProperty(PropertyInterface('Path', _propertyGroup))\n      Object.defineProperties(interfaceFunction, {\n        path: {\n          get: function () {\n            if (prop.k) {\n              prop.getValue()\n            }\n            return prop\n          },\n        },\n        shape: {\n          get: function () {\n            if (prop.k) {\n              prop.getValue()\n            }\n            return prop\n          },\n        },\n        _name: { value: shape.nm },\n        ix: { value: shape.ix },\n        propertyIndex: { value: shape.ix },\n        mn: { value: shape.mn },\n        propertyGroup: { value: propertyGroup },\n      })\n      return interfaceFunction\n    }\n  })()\n\n  const ShapeExpressionInterface = (function () {\n    function iterateElements(shapes, view, propertyGroup) {\n      var arr = []\n      var i\n      var len = shapes ? shapes.length : 0\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') {\n          // 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      return arr\n    }\n\n    function contentsInterfaceFactory(shape, view, propertyGroup) {\n      var interfaces\n      var interfaceFunction = function _interfaceFunction(value) {\n        var i = 0\n        var len = interfaces.length\n        while (i < len) {\n          if (\n            interfaces[i]._name === value ||\n            interfaces[i].mn === value ||\n            interfaces[i].propertyIndex === value ||\n            interfaces[i].ix === value ||\n            interfaces[i].ind === value\n          ) {\n            return interfaces[i]\n          }\n          i += 1\n        }\n        if (typeof value === 'number') {\n          return interfaces[value - 1]\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(\n        shape.it[shape.it.length - 1],\n        view.it[view.it.length - 1],\n        interfaceFunction.propertyGroup,\n      )\n      interfaceFunction.transform = transformInterface\n      interfaceFunction.propertyIndex = shape.cix\n      interfaceFunction._name = shape.nm\n\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          default:\n            return interfaceFunction.transform\n        }\n      }\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\n      var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup)\n      var transformInterface = transformInterfaceFactory(\n        shape.it[shape.it.length - 1],\n        view.it[view.it.length - 1],\n        interfaceFunction.propertyGroup,\n      )\n      interfaceFunction.content = content\n      interfaceFunction.transform = transformInterface\n      Object.defineProperty(interfaceFunction, '_name', {\n        get: function () {\n          return shape.nm\n        },\n      })\n      // interfaceFunction.content = interfaceFunction;\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        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity\n        }\n        return null\n      }\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c),\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o),\n        },\n        _name: { value: shape.nm },\n        mn: { 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        if (val === 'End Point' || val === 'end point') {\n          return interfaceFunction.endPoint\n        }\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity\n        }\n        return null\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 () {\n            return 'a'\n          },\n        },\n        _name: { value: shape.nm },\n        mn: { 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    function defaultInterfaceFactory() {\n      function interfaceFunction() {\n        return null\n      }\n      return interfaceFunction\n    }\n\n    function strokeInterfaceFactory(shape, view, propertyGroup) {\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\n      var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup)\n      function addPropertyToDashOb(i) {\n        Object.defineProperty(dashOb, shape.d[i].nm, {\n          get: ExpressionPropertyInterface(view.d.dataProps[i].p),\n        })\n      }\n      var i\n      var len = shape.d ? shape.d.length : 0\n      var dashOb = {}\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        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity\n        }\n        if (val === 'Stroke Width' || val === 'stroke width') {\n          return interfaceFunction.strokeWidth\n        }\n        return null\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 () {\n            return dashOb\n          },\n        },\n        _name: { value: shape.nm },\n        mn: { 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        if (val === shape.s.ix) {\n          return interfaceFunction.start\n        }\n        if (val === shape.o.ix) {\n          return interfaceFunction.offset\n        }\n        return null\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\n      interfaceFunction.propertyIndex = shape.ix\n\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\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: { value: shape.nm },\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        if (shape.o.ix === value || value === 'Opacity') {\n          return interfaceFunction.opacity\n        }\n        if (shape.p.ix === value || value === 'Position') {\n          return interfaceFunction.position\n        }\n        if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n          return interfaceFunction.rotation\n        }\n        if (shape.s.ix === value || value === 'Scale') {\n          return interfaceFunction.scale\n        }\n        if ((shape.sk && shape.sk.ix === value) || value === 'Skew') {\n          return interfaceFunction.skew\n        }\n        if ((shape.sa && shape.sa.ix === value) || value === 'Skew Axis') {\n          return interfaceFunction.skewAxis\n        }\n        return null\n      }\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\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      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      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: { value: shape.nm },\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        if (shape.s.ix === value) {\n          return interfaceFunction.size\n        }\n        return null\n      }\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\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\n      Object.defineProperties(interfaceFunction, {\n        size: {\n          get: ExpressionPropertyInterface(prop.s),\n        },\n        position: {\n          get: ExpressionPropertyInterface(prop.p),\n        },\n        _name: { value: shape.nm },\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        if (shape.r.ix === value) {\n          return interfaceFunction.rotation\n        }\n        if (shape.pt.ix === value) {\n          return interfaceFunction.points\n        }\n        if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n          return interfaceFunction.outerRadius\n        }\n        if (shape.os.ix === value) {\n          return interfaceFunction.outerRoundness\n        }\n        if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n          return interfaceFunction.innerRadius\n        }\n        if (shape.is && shape.is.ix === value) {\n          return interfaceFunction.innerRoundness\n        }\n        return null\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\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      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: { value: shape.nm },\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        if (shape.r.ix === value) {\n          return interfaceFunction.roundness\n        }\n        if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n          return interfaceFunction.size\n        }\n        return null\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\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: { value: shape.nm },\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        return null\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\n      var prop = view\n      interfaceFunction.propertyIndex = shape.ix\n      prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup))\n\n      Object.defineProperties(interfaceFunction, {\n        radius: {\n          get: ExpressionPropertyInterface(prop.rd),\n        },\n        _name: { value: shape.nm },\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        if (shape.o.ix === value || value === 'Offset') {\n          return interfaceFunction.offset\n        }\n        return null\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup)\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: { value: shape.nm },\n      })\n      interfaceFunction.mn = shape.mn\n      return interfaceFunction\n    }\n\n    return function (shapes, view, propertyGroup) {\n      var interfaces\n      function _interfaceFunction(value) {\n        if (typeof value === 'number') {\n          value = value === undefined ? 1 : value\n          if (value === 0) {\n            return propertyGroup\n          }\n          return interfaces[value - 1]\n        }\n        var i = 0\n        var len = interfaces.length\n        while (i < len) {\n          if (interfaces[i]._name === value) {\n            return interfaces[i]\n          }\n          i += 1\n        }\n        return null\n      }\n      function parentGroupWrapper() {\n        return propertyGroup\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  const TextExpressionInterface = (function () {\n    return function (elem) {\n      var _prevValue\n      var _sourceText\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Text Document':\n            return _thisLayerFunction.sourceText\n          default:\n            return null\n        }\n      }\n      Object.defineProperty(_thisLayerFunction, 'sourceText', {\n        get: function () {\n          elem.textProperty.getValue()\n          var stringValue = elem.textProperty.currentData.t\n          if (stringValue !== _prevValue) {\n            elem.textProperty.currentData.t = _prevValue\n            _sourceText = new String(stringValue) // eslint-disable-line no-new-wrappers\n            // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n            _sourceText.value = stringValue || new String(stringValue) // eslint-disable-line no-new-wrappers\n          }\n          return _sourceText\n        },\n      })\n      return _thisLayerFunction\n    }\n  })()\n\n  const 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\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  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container)\n  }\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container)\n  }\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container)\n  }\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container)\n  }\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container)\n  }\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container)\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    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\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    for (i = 0; i < len; i += 1) {\n      eff = null\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this)\n          break\n        case 1:\n          eff = new AngleEffect(effects[i], element, this)\n          break\n        case 2:\n          eff = new ColorEffect(effects[i], element, this)\n          break\n        case 3:\n          eff = new PointEffect(effects[i], element, this)\n          break\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this)\n          break\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this)\n          break\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this)\n          break\n        case 5:\n          eff = new EffectsManager(effects[i], element, this)\n          break\n        // case 6:\n        default:\n          eff = new NoValueEffect(effects[i], element, this)\n          break\n      }\n      if (eff) {\n        this.effectElements.push(eff)\n      }\n    }\n  }\n\n  function BaseElement() {}\n\n  BaseElement.prototype = {\n    checkMasks: function () {\n      if (!this.data.hasMask) {\n        return false\n      }\n      var i = 0\n      var len = this.data.masksProperties.length\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true\n        }\n        i += 1\n      }\n      return false\n    },\n    initExpressions: function () {\n      this.layerInterface = LayerExpressionInterface(this)\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager)\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(\n          this.shapesData,\n          this.itemsData,\n          this.layerInterface,\n        )\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 () {\n      var blendModeValue = getBlendMode(this.data.bm)\n      var elem = this.baseElement || this.layerElement\n\n      elem.style['mix-blend-mode'] = blendModeValue\n    },\n    initBaseData: function (data, globalData, comp) {\n      this.globalData = globalData\n      this.comp = comp\n      this.data = data\n      this.layerId = createElementID()\n\n      // Stretch factor for old animations missing this property.\n      if (!this.data.sr) {\n        this.data.sr = 1\n      }\n      // effects manager\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties)\n    },\n    getType: function () {\n      return this.type\n    },\n    sourceRectAtTime: function () {},\n  }\n\n  /**\n   * @file\n   * Handles element's layer frame update.\n   * Checks layer in point and out point\n   *\n   */\n\n  function FrameElement() {}\n\n  FrameElement.prototype = {\n    /**\n     * @function\n     * Initializes frame related properties.\n     *\n     */\n    initFrame: function () {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false\n      // list of animated properties\n      this.dynamicProperties = []\n      // If layer has been modified in current tick this will be true\n      this._mdf = false\n    },\n    /**\n     * @function\n     * Calculates all dynamic values\n     *\n     * @param {number} num\n     * current frame number in Layer's time\n     * @param {boolean} isVisible\n     * if layers is currently in range\n     *\n     */\n    prepareProperties: function (num, isVisible) {\n      var i\n      var len = this.dynamicProperties.length\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || (this._isParent && this.dynamicProperties[i].propType === 'transform')) {\n          this.dynamicProperties[i].getValue()\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true\n            this._mdf = true\n          }\n        }\n      }\n    },\n    addDynamicProperty: function (prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop)\n      }\n    },\n  }\n\n  const FootageInterface = (function () {\n    var outlineInterfaceFactory = function (elem) {\n      var currentPropertyName = ''\n      var currentProperty = elem.getFootageData()\n      function init() {\n        currentPropertyName = ''\n        currentProperty = elem.getFootageData()\n        return searchProperty\n      }\n      function searchProperty(value) {\n        if (currentProperty[value]) {\n          currentPropertyName = value\n          currentProperty = currentProperty[value]\n          if (typeof currentProperty === 'object') {\n            return searchProperty\n          }\n          return currentProperty\n        }\n        var propertyNameIndex = value.indexOf(currentPropertyName)\n        if (propertyNameIndex !== -1) {\n          var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10)\n          currentProperty = currentProperty[index]\n          if (typeof currentProperty === 'object') {\n            return searchProperty\n          }\n          return currentProperty\n        }\n        return ''\n      }\n      return init\n    }\n\n    var dataInterfaceFactory = function (elem) {\n      function interfaceFunction(value) {\n        if (value === 'Outline') {\n          return interfaceFunction.outlineInterface()\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        return null\n      }\n\n      _interfaceFunction._name = 'Data'\n      _interfaceFunction.dataInterface = dataInterfaceFactory(elem)\n      return _interfaceFunction\n    }\n  })()\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame()\n    this.initRenderable()\n    this.assetData = globalData.getAssetData(data.refId)\n    this.footageData = globalData.imageLoader.getAsset(this.assetData)\n    this.initBaseData(data, globalData, comp)\n  }\n\n  FootageElement.prototype.prepareFrame = function () {}\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement)\n\n  FootageElement.prototype.getBaseElement = function () {\n    return null\n  }\n\n  FootageElement.prototype.renderFrame = function () {}\n\n  FootageElement.prototype.destroy = function () {}\n\n  FootageElement.prototype.initExpressions = function () {\n    this.layerInterface = FootageInterface(this)\n  }\n\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData\n  }\n\n  function AudioElement(data, globalData, comp) {\n    this.initFrame()\n    this.initRenderable()\n    this.assetData = globalData.getAssetData(data.refId)\n    this.initBaseData(data, globalData, comp)\n    this._isPlaying = false\n    this._canPlay = false\n    var assetPath = this.globalData.getAssetsPath(this.assetData)\n    this.audio = this.globalData.audioController.createAudio(assetPath)\n    this._currentTime = 0\n    this.globalData.audioController.addAudio(this)\n    this._volumeMultiplier = 1\n    this._volume = 1\n    this._previousVolume = null\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : { k: [100] }, 1, 0.01, this)\n  }\n\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true)\n    this.prepareProperties(num, true)\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    this._volume = this.lv.v[0]\n    var totalVolume = this._volume * this._volumeMultiplier\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 (\n        !this.audio.playing() ||\n        Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1\n      ) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate)\n      }\n    }\n  }\n\n  AudioElement.prototype.show = function () {\n    // 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  BaseRenderer.prototype.checkLayers = function (num) {\n    var i\n    var len = this.layers.length\n    var data\n    this.completeLayers = true\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i]\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      this.completeLayers = this.elements[i] ? this.completeLayers : false\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      case 0:\n        return this.createComp(layer)\n      case 1:\n        return this.createSolid(layer)\n      case 3:\n        return this.createNull(layer)\n      case 4:\n        return this.createShape(layer)\n      case 5:\n        return this.createText(layer)\n      case 6:\n        return this.createAudio(layer)\n      case 13:\n        return this.createCamera(layer)\n      case 15:\n        return this.createFootage(layer)\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    for (i = 0; i < len; i += 1) {\n      this.buildItem(i)\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    for (i = 0; i < len; i += 1) {\n      j = 0\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i]\n          break\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  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    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          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy)\n          } else {\n            element.setHierarchy(hierarchy)\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    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i])\n        comp.initExpressions()\n        this.globalData.projectInterface.registerComposition(comp)\n      }\n    }\n  }\n\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift()\n    var element\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue]\n    } else {\n      var i\n      var len = this.elements.length\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    if (path.length === 0) {\n      return element\n    }\n    return element.getElementByPath(path)\n  }\n\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager()\n    this.globalData.fontManager.addChars(animData.chars)\n    this.globalData.fontManager.addFonts(animData.fonts, fontsContainer)\n    this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem)\n    this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem)\n    this.globalData.imageLoader = this.animationItem.imagePreloader\n    this.globalData.audioController = this.animationItem.audioController\n    this.globalData.frameId = 0\n    this.globalData.frameRate = animData.fr\n    this.globalData.nm = animData.nm\n    this.globalData.compSize = {\n      w: animData.w,\n      h: animData.h,\n    }\n  }\n\n  function TransformElement() {}\n\n  TransformElement.prototype = {\n    initTransform: function () {\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 },\n        _matMdf: false,\n        _opMdf: false,\n        mat: new Matrix(),\n      }\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true\n      }\n\n      // TODO: check TYPE 11: Guided elements\n      if (this.data.ty !== 11) {\n        // this.createElements();\n      }\n    },\n    renderTransform: function () {\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\n        // Checking if any of the transformation matrices in the hierarchy chain has changed.\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            i += 1\n          }\n        }\n\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props\n          finalMat.cloneFromProps(mat)\n          for (i = 0; i < len; i += 1) {\n            mat = this.hierarchy[i].finalTransform.mProp.v.props\n            finalMat.transform(\n              mat[0],\n              mat[1],\n              mat[2],\n              mat[3],\n              mat[4],\n              mat[5],\n              mat[6],\n              mat[7],\n              mat[8],\n              mat[9],\n              mat[10],\n              mat[11],\n              mat[12],\n              mat[13],\n              mat[14],\n              mat[15],\n            )\n          }\n        }\n      }\n    },\n    globalToLocal: function (pt) {\n      var transforms = []\n      transforms.push(this.finalTransform)\n      var flag = true\n      var comp = this.comp\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform)\n          }\n          comp = comp.comp\n        } else {\n          flag = false\n        }\n      }\n      var i\n      var len = transforms.length\n      var ptNew\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0)\n        // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0]\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\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    for (i = 0; i < len; i += 1) {\n      if (\n        (properties[i].mode !== 'a' && properties[i].mode !== 'n') ||\n        properties[i].inv ||\n        properties[i].o.k !== 100 ||\n        properties[i].o.x\n      ) {\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      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\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        }\n\n        // TODO move this to a factory or to a constructor\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        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length\n          var g = createNS('g')\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j])\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\n          currentMasks.length = 0\n          currentMasks.push(g)\n        } else {\n          currentMasks.push(path)\n        }\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath()\n        }\n        // TODO move this to a factory or to a constructor\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        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\n    len = currentMasks.length\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    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    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      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v)\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        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan\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(\n                'filter',\n                '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            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    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 +=\n        ' C' +\n        pathNodes.o[i - 1][0] +\n        ',' +\n        pathNodes.o[i - 1][1] +\n        ' ' +\n        pathNodes.i[i][0] +\n        ',' +\n        pathNodes.i[i][1] +\n        ' ' +\n        pathNodes.v[i][0] +\n        ',' +\n        pathNodes.v[i][1]\n    }\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    if (pathNodes.c && len > 1) {\n      pathString +=\n        ' C' +\n        pathNodes.o[i - 1][0] +\n        ',' +\n        pathNodes.o[i - 1][1] +\n        ' ' +\n        pathNodes.i[0][0] +\n        ',' +\n        pathNodes.i[0][1] +\n        ' ' +\n        pathNodes.v[0][0] +\n        ',' +\n        pathNodes.v[0][1]\n    }\n    // pathNodes.__renderedString = pathString;\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = ''\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString\n        }\n        viewData.elem.setAttribute('d', pathShapeValue)\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  const 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      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      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  const featureSupport = (function () {\n    var ob = {\n      maskType: true,\n    }\n    if (\n      /MSIE 10/i.test(navigator.userAgent) ||\n      /MSIE 9/i.test(navigator.userAgent) ||\n      /rv:11.0/i.test(navigator.userAgent) ||\n      /Edge\\/\\d./i.test(navigator.userAgent)\n    ) {\n      ob.maskType = false\n    }\n    return ob\n  })()\n\n  var registeredEffects = {}\n  var idPrefix = 'filter_result_'\n\n  function SVGEffects(elem) {\n    var i\n    var source = 'SourceGraphic'\n    var len = elem.data.ef ? elem.data.ef.length : 0\n    var filId = createElementID()\n    var fil = filtersFactory.createFilter(filId, true)\n    var count = 0\n    this.filters = []\n    var filterManager\n    for (i = 0; i < len; i += 1) {\n      filterManager = null\n      var type = elem.data.ef[i].ty\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source)\n        source = idPrefix + count\n        if (registeredEffects[type].countsAsEffect) {\n          count += 1\n        }\n      }\n      if (filterManager) {\n        this.filters.push(filterManager)\n      }\n    }\n    if (count) {\n      elem.globalData.defs.appendChild(fil)\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')')\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    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame)\n    }\n  }\n\n  function registerEffect(id, effect, countsAsEffect) {\n    registeredEffects[id] = {\n      effect,\n      countsAsEffect,\n    }\n  }\n\n  function SVGBaseElement() {}\n\n  SVGBaseElement.prototype = {\n    initRendererElement: function () {\n      this.layerElement = createNS('g')\n    },\n    createContainerElements: function () {\n      this.matteElement = createNS('g')\n      this.transformedElement = this.layerElement\n      this.maskedElement = this.layerElement\n      this._sizeChanged = false\n      var layerElementParent = null\n      // If this layer acts as a mask for the following layer\n      var filId\n      var fil\n      var gg\n      if (this.data.td) {\n        if (this.data.td == 3 || this.data.td == 1) {\n          // eslint-disable-line eqeqeq\n          var masker = createNS('mask')\n          masker.setAttribute('id', this.layerId)\n          masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha') // eslint-disable-line eqeqeq\n          masker.appendChild(this.layerElement)\n          layerElementParent = masker\n          this.globalData.defs.appendChild(masker)\n          // This is only for IE and Edge when mask if of type alpha\n          if (!featureSupport.maskType && this.data.td == 1) {\n            // eslint-disable-line eqeqeq\n            masker.setAttribute('mask-type', 'luminance')\n            filId = createElementID()\n            fil = filtersFactory.createFilter(filId)\n            this.globalData.defs.appendChild(fil)\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter())\n            gg = createNS('g')\n            gg.appendChild(this.layerElement)\n            layerElementParent = gg\n            masker.appendChild(gg)\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')')\n          }\n        } else if (this.data.td == 2) {\n          // eslint-disable-line eqeqeq\n          var maskGroup = createNS('mask')\n          maskGroup.setAttribute('id', this.layerId)\n          maskGroup.setAttribute('mask-type', 'alpha')\n          var maskGrouper = createNS('g')\n          maskGroup.appendChild(maskGrouper)\n          filId = createElementID()\n          fil = filtersFactory.createFilter(filId)\n          /// /\n\n          // This solution doesn't work on Android when meta tag with viewport attribute is set\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 1');\n                fil.appendChild(feColorMatrix); */\n          /// /\n          var feCTr = createNS('feComponentTransfer')\n          feCTr.setAttribute('in', 'SourceGraphic')\n          fil.appendChild(feCTr)\n          var feFunc = createNS('feFuncA')\n          feFunc.setAttribute('type', 'table')\n          feFunc.setAttribute('tableValues', '1.0 0.0')\n          feCTr.appendChild(feFunc)\n          /// /\n          this.globalData.defs.appendChild(fil)\n          var alphaRect = createNS('rect')\n          alphaRect.setAttribute('width', this.comp.data.w)\n          alphaRect.setAttribute('height', this.comp.data.h)\n          alphaRect.setAttribute('x', '0')\n          alphaRect.setAttribute('y', '0')\n          alphaRect.setAttribute('fill', '#ffffff')\n          alphaRect.setAttribute('opacity', '0')\n          maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')')\n          maskGrouper.appendChild(alphaRect)\n          maskGrouper.appendChild(this.layerElement)\n          layerElementParent = maskGrouper\n          if (!featureSupport.maskType) {\n            maskGroup.setAttribute('mask-type', 'luminance')\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter())\n            gg = createNS('g')\n            maskGrouper.appendChild(alphaRect)\n            gg.appendChild(this.layerElement)\n            layerElementParent = gg\n            maskGrouper.appendChild(gg)\n          }\n          this.globalData.defs.appendChild(maskGroup)\n        }\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement)\n        layerElementParent = this.matteElement\n        this.baseElement = this.matteElement\n      } else {\n        this.baseElement = this.layerElement\n      }\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln)\n      }\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl)\n      }\n      // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath')\n        var pt = createNS('path')\n        pt.setAttribute(\n          'd',\n          'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z',\n        )\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          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      if (this.data.bm !== 0) {\n        this.setBlendMode()\n      }\n    },\n    renderElement: function () {\n      if (this.finalTransform._matMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS())\n      }\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v)\n      }\n    },\n    destroyBaseElement: function () {\n      this.layerElement = null\n      this.matteElement = null\n      this.maskManager.destroy()\n    },\n    getBaseElement: function () {\n      if (this.data.hd) {\n        return null\n      }\n      return this.baseElement\n    },\n    createRenderableComponents: function () {\n      this.maskManager = new MaskElement(this.data, this, this.globalData)\n      this.renderableEffectsManager = new SVGEffects(this)\n    },\n    setMatte: function (id) {\n      if (!this.matteElement) {\n        return\n      }\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')')\n    },\n  }\n\n  /**\n   * @file\n   * Handles AE's layer parenting property.\n   *\n   */\n\n  function HierarchyElement() {}\n\n  HierarchyElement.prototype = {\n    /**\n     * @function\n     * Initializes hierarchy properties\n     *\n     */\n    initHierarchy: function () {\n      // element's parent list\n      this.hierarchy = []\n      // if element is parent of another layer _isParent will be true\n      this._isParent = false\n      this.checkParenting()\n    },\n    /**\n     * @function\n     * Sets layer's hierarchy.\n     * @param {array} hierarch\n     * layer's parent list\n     *\n     */\n    setHierarchy: function (hierarchy) {\n      this.hierarchy = hierarchy\n    },\n    /**\n     * @function\n     * Sets layer as parent.\n     *\n     */\n    setAsParent: function () {\n      this._isParent = true\n    },\n    /**\n     * @function\n     * Searches layer's parenting chain\n     *\n     */\n    checkParenting: function () {\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 (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 () {\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 () {\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          this.hidden = false\n          this._isFirstFrame = true\n        }\n      },\n      renderFrame: function () {\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        this.renderTransform()\n        this.renderRenderable()\n        this.renderElement()\n        this.renderInnerContent()\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false\n        }\n      },\n      renderInnerContent: function () {},\n      prepareFrame: function (num) {\n        this._mdf = false\n        this.prepareRenderableFrame(num)\n        this.prepareProperties(num, this.isInRange)\n        this.checkTransparency()\n      },\n      destroy: function () {\n        this.innerElem = null\n        this.destroyBaseElement()\n      },\n    }\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement)\n  })()\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId)\n    this.initElement(data, globalData, comp)\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h,\n    }\n  }\n\n  extendPrototype(\n    [BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement],\n    IImageElement,\n  )\n\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData)\n\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(\n      'preserveAspectRatio',\n      this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio,\n    )\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath)\n\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 (data) {\n      var i\n      var len = this.shapeModifiers.length\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data)\n      }\n    },\n    isShapeInAnimatedModifiers: function (data) {\n      var i = 0\n      var len = this.shapeModifiers.length\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true\n        }\n      }\n      return false\n    },\n    renderModifiers: function () {\n      if (!this.shapeModifiers.length) {\n        return\n      }\n      var i\n      var len = this.shapes.length\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      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame)\n        // 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        if (shouldBreakProcess) {\n          break\n        }\n      }\n    },\n\n    searchProcessedElement: function (elem) {\n      var elements = this.processedElements\n      var i = 0\n      var len = elements.length\n      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos\n        }\n        i += 1\n      }\n      return 0\n    },\n    addProcessedElement: function (elem, pos) {\n      var elements = this.processedElements\n      var i = elements.length\n      while (i) {\n        i -= 1\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos\n          return\n        }\n      }\n      elements.push(new ProcessedElement(elem, pos))\n    },\n    prepareFrame: function (num) {\n      this.prepareRenderableFrame(num)\n      this.prepareProperties(num, this.isInRange)\n    },\n  }\n\n  const lineCapEnum = {\n    1: 'butt',\n    2: 'round',\n    3: 'square',\n  }\n\n  const 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\n    // 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    this._isAnimated = !!shape.k\n    // TODO: commenting this for now since all shapes are animated\n    var i = 0\n    var len = transformers.length\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true\n        break\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    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: data[i].n, p: prop }\n    }\n    if (!this.k) {\n      this.getValue(true)\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    this.frameId = this.elem.globalData.frameId\n    this.iterateDynamicProperties()\n    this._mdf = this._mdf || forceRender\n    if (this._mdf) {\n      var i = 0\n      var len = this.dataProps.length\n      if (this.renderer === 'svg') {\n        this.dashStr = ''\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  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    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2])\n      if (diff > 0.01) {\n        return false\n      }\n      i += 1\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    if (this.data.k.k[0].s) {\n      var i = 0\n      var len = this.data.k.k.length\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false\n        }\n        i += 1\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false\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    if (this.prop._mdf || forceRender) {\n      var i\n      var len = this.data.p * 4\n      var mult\n      var val\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        if (this.c[i] !== val) {\n          this.c[i] = val\n          this._cmdf = !forceRender\n        }\n      }\n      if (this.o.length) {\n        len = this.prop.v.length\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          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      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 || { k: 0 }, 0, 0.01, this)\n    this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 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    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop')\n      gfill.appendChild(stop)\n      stops.push(stop)\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      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      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')')\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2])\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2])\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml)\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  const buildShapeString = function (pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return ''\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    for (i = 1; i < length; i += 1) {\n      shapeString +=\n        ' C' +\n        mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) +\n        ' ' +\n        mat.applyToPointStringified(_i[i][0], _i[i][1]) +\n        ' ' +\n        mat.applyToPointStringified(_v[i][0], _v[i][1])\n    }\n    if (closed && length) {\n      shapeString +=\n        ' C' +\n        mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) +\n        ' ' +\n        mat.applyToPointStringified(_i[0][0], _i[0][1]) +\n        ' ' +\n        mat.applyToPointStringified(_v[0][0], _v[0][1])\n      shapeString += 'z'\n    }\n    return shapeString\n  }\n\n  const SVGElementsRenderer = (function () {\n    var _identityMatrix = new Matrix()\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        case 'gf':\n          return renderGradient\n        case 'gs':\n          return renderGradientStroke\n        case 'st':\n          return renderStroke\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath\n        case 'tr':\n          return renderContentTransform\n        case 'no':\n          return renderNoop\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      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS())\n      }\n    }\n\n    function renderNoop() {}\n\n    function renderPath(styleData, itemData, isFirstFrame) {\n      var j\n      var jLen\n      var pathStringTransformed\n      var redraw\n      var pathNodes\n      var l\n      var lLen = itemData.styles.length\n      var lvl = itemData.lvl\n      var paths\n      var mat\n      var props\n      var iterations\n      var k\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame\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          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw\n            iterations -= 1\n            k -= 1\n          }\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl\n            k = itemData.transformers.length - 1\n            while (iterations > 0) {\n              props = itemData.transformers[k].mProps.v.props\n              mat.transform(\n                props[0],\n                props[1],\n                props[2],\n                props[3],\n                props[4],\n                props[5],\n                props[6],\n                props[7],\n                props[8],\n                props[9],\n                props[10],\n                props[11],\n                props[12],\n                props[13],\n                props[14],\n                props[15],\n              )\n              iterations -= 1\n              k -= 1\n            }\n          }\n        } else {\n          mat = _identityMatrix\n        }\n        paths = itemData.sh.paths\n        jLen = paths._length\n        if (redraw) {\n          pathStringTransformed = ''\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j]\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat)\n            }\n          }\n          itemData.caches[l] = pathStringTransformed\n        } else {\n          pathStringTransformed = itemData.caches[l]\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(\n          'fill',\n          '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      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        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0])\n          itemData.of.setAttribute(attr2, pt1[1])\n        }\n      }\n      var stops\n      var i\n      var len\n      var stop\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst\n        var cValues = itemData.g.c\n        len = stops.length\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i]\n          stop.setAttribute('offset', cValues[i * 4] + '%')\n          stop.setAttribute(\n            'stop-color',\n            '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        if (itemData.g._collapsable) {\n          stops = itemData.cst\n        } else {\n          stops = itemData.ost\n        }\n        len = stops.length\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i]\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%')\n          }\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1])\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          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        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          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad)\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          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0])\n\n          var percent = itemData.h.v\n          if (percent >= 1) {\n            percent = 0.99\n          } else if (percent <= -1) {\n            percent = -0.99\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          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x)\n            itemData.of.setAttribute('fy', y)\n          }\n        }\n        // gfill.setAttribute('fy','200');\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style\n      var d = itemData.d\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      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute(\n          'stroke',\n          '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      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v)\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 = []\n    // Full shape data\n    this.shapesData = data.shapes\n    // List of styles that will be applied to shapes\n    this.stylesList = []\n    // List of modifiers that will be applied to shapes\n    this.shapeModifiers = []\n    // List of items in shape tree\n    this.itemsData = []\n    // List of items in previous shape tree\n    this.processedElements = []\n    // List of animated components\n    this.animatedContents = []\n    this.initElement(data, globalData, comp)\n    // 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    this.prevViewData = []\n    // 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(\n    [\n      BaseElement,\n      TransformElement,\n      SVGBaseElement,\n      IShapeElement,\n      HierarchyElement,\n      FrameElement,\n      RenderableDOMElement,\n    ],\n    SVGShapeElement,\n  )\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\n  /*\nThis method searches for multiple shapes that affect a single element and one of them is animated\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    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j]\n      areAnimated = false\n      tempShapes.length = 0\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i]\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape)\n          areAnimated = shape._isAnimated || areAnimated\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    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\n    var pathElement = styleOb.pElem\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      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      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    if (data.cl) {\n      pathElement.setAttribute('class', data.cl)\n    }\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm)\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    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln)\n    }\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl)\n    }\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm)\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    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    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    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return\n      }\n      i += 1\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    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    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i]\n    }\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true)\n    this.filterUniqueShapes()\n    len = this.dynamicProperties.length\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue()\n    }\n    this.renderModifiers()\n  }\n\n  SVGShapeElement.prototype.searchShapes = function (\n    arr,\n    itemsData,\n    prevViewData,\n    container,\n    level,\n    transformers,\n    render,\n  ) {\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    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i])\n      if (!processedPos) {\n        arr[i]._render = render\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1]\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        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem)\n          }\n        }\n        ownStyles.push(itemsData[i].style)\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i])\n        } else {\n          jLen = itemsData[i].it.length\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j]\n          }\n        }\n        this.searchShapes(\n          arr[i].it,\n          itemsData[i].it,\n          itemsData[i].prevViewData,\n          itemsData[i].gr,\n          level + 1,\n          ownTransformers,\n          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        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        this.setElementStyles(itemsData[i])\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty)\n          modifier.init(this, arr[i])\n          itemsData[i] = modifier\n          this.shapeModifiers.push(modifier)\n        } else {\n          modifier = itemsData[i]\n          modifier.closed = false\n        }\n        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        ownModifiers.push(modifier)\n      }\n      this.addProcessedElement(arr[i], i + 1)\n    }\n    len = ownStyles.length\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true\n    }\n    len = ownModifiers.length\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    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset()\n    }\n    this.renderShape()\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)\n          // Adding M0 0 fixes same mask bug on all browsers\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d\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    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i]\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    if (this.sw !== sw) {\n      this.sw = sw\n      this._mdf.sw = true\n      updated = true\n    }\n    if (this.sc !== sc) {\n      this.sc = sc\n      this._mdf.sc = true\n      updated = true\n    }\n    if (this.fc !== fc) {\n      this.fc = fc\n      this._mdf.fc = true\n      updated = true\n    }\n    if (this.m !== m) {\n      this.m = m\n      this._mdf.m = true\n      updated = true\n    }\n    if (\n      p.length &&\n      (this.p[0] !== p[0] ||\n        this.p[1] !== p[1] ||\n        this.p[4] !== p[4] ||\n        this.p[5] !== p[5] ||\n        this.p[12] !== p[12] ||\n        this.p[13] !== p[13])\n    ) {\n      this.p = p\n      this._mdf.p = true\n      updated = true\n    }\n    return updated\n  }\n\n  function TextProperty(elem, data) {\n    this._frameId = initialDefaultFrame\n    this.pv = ''\n    this.v = ''\n    this.kf = false\n    this._isFirstFrame = true\n    this._mdf = false\n    this.data = data\n    this.elem = elem\n    this.comp = this.elem.comp\n    this.keysIndex = 0\n    this.canResize = false\n    this.minimumFontSize = 1\n    this.effectsSequence = []\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false,\n    }\n    this.copyData(this.currentData, this.data.d.k[0].s)\n\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData)\n    }\n  }\n\n  TextProperty.prototype.defaultBoxWidth = [0, 0]\n\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s]\n      }\n    }\n    return obj\n  }\n\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data)\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    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this))\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    this.currentData.t = this.data.d.k[this.keysIndex].s.t\n    var currentValue = this.currentData\n    var currentIndex = this.keysIndex\n    if (this.lock) {\n      this.setCurrentData(this.currentData)\n      return\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    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    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue)\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    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break\n      }\n      i += 1\n    }\n    if (this.keysIndex !== i) {\n      this.keysIndex = i\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    while (i < len) {\n      charCode = text.charCodeAt(i)\n      if (FontManager.isCombinedCharacter(charCode)) {\n        charactersArray[charactersArray.length - 1] += text.charAt(i)\n      } else if (charCode >= 0xd800 && charCode <= 0xdbff) {\n        secondCharCode = text.charCodeAt(i + 1)\n        if (secondCharCode >= 0xdc00 && secondCharCode <= 0xdfff) {\n          if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n            charactersArray[charactersArray.length - 1] += text.substr(i, 2)\n            shouldCombine = false\n          } else {\n            charactersArray.push(text.substr(i, 2))\n          }\n          i += 1\n        } else {\n          charactersArray.push(text.charAt(i))\n        }\n      } else if (charCode > 0xdbff) {\n        secondCharCode = text.charCodeAt(i + 1)\n        if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n          shouldCombine = true\n          charactersArray[charactersArray.length - 1] += text.substr(i, 2)\n          i += 1\n        } else {\n          charactersArray.push(text.charAt(i))\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        charactersArray[charactersArray.length - 1] += text.charAt(i)\n        shouldCombine = true\n      } else {\n        charactersArray.push(text.charAt(i))\n      }\n      i += 1\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\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    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      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        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0)\n          newLineFlag = false\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          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          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1\n            } else {\n              i = lastSpaceIndex\n            }\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r')\n            // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n            lastSpaceIndex = -1\n            lineWidth = 0\n          } else {\n            lineWidth += cLength\n            lineWidth += trackingOffset\n          }\n        }\n        currentHeight += (fontData.ascent * documentData.finalSize) / 100\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    lineWidth = -trackingOffset\n    cLength = 0\n    var uncollapsedSpaces = 0\n    var currentChar\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false\n      currentChar = documentData.finalText[i]\n      charCode = currentChar.charCodeAt(0)\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      if (fontManager.chars) {\n        charData = fontManager.getCharData(\n          currentChar,\n          fontData.fStyle,\n          fontManager.getFontByName(documentData.f).fFamily,\n        )\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      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      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength\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          index += 1\n          currentSize = 0\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength\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          currentSize = 0\n          index += 1\n        }\n      } else {\n        letters[index].ind = index\n        letters[index].extra = 0\n        index += 1\n      }\n    }\n    documentData.l = letters\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth\n    lineWidths.push(lineWidth)\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0]\n      documentData.justifyOffset = 0\n    } else {\n      documentData.boxWidth = maxLineWidth\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth\n          break\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2\n          break\n        default:\n          documentData.justifyOffset = 0\n      }\n    }\n    documentData.lineWidths = lineWidths\n\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    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j]\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true\n      }\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true\n      }\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true\n      }\n      ind = 0\n      based = animatorData.s.b\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i]\n        letterData.anIndexes[j] = ind\n        if (\n          (based == 1 && letterData.val !== '') ||\n          (based == 2 && letterData.val !== '' && letterData.val !== ' ') ||\n          (based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1)) ||\n          (based == 4 && (letterData.n || i == len - 1))\n        ) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind)\n          }\n          ind += 1\n        }\n      }\n      data.a[j].s.totalChars = ind\n      var currentInd = -1\n      var newInd\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i]\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          letterData.anIndexes[j] = newInd\n        }\n      }\n    }\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2\n    documentData.ls = documentData.ls || 0\n    documentData.ascent = (fontData.ascent * documentData.finalSize) / 100\n  }\n\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index\n    var dData = this.copyData({}, this.data.d.k[index].s)\n    dData = this.copyData(dData, newData)\n    this.data.d.k[index].s = dData\n    this.recalculate(index)\n    this.elem.addDynamicProperty(this)\n  }\n\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s\n    dData.__complete = false\n    this.keysIndex = 0\n    this._isFirstFrame = true\n    this.getValue(dData)\n  }\n\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize\n    this.recalculate(this.keysIndex)\n    this.elem.addDynamicProperty(this)\n  }\n\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1\n    this.recalculate(this.keysIndex)\n    this.elem.addDynamicProperty(this)\n  }\n\n  const 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 || { k: 0 }, 0, 0, this)\n      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this)\n      } else {\n        this.e = { v: 100 }\n      }\n      this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this)\n      this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this)\n      this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this)\n      this.sm = PropertyFactory.getProp(elem, data.sm || { k: 100 }, 0, 0, this)\n      this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this)\n      if (!this.dynamicProperties.length) {\n        this.getValue()\n      }\n    }\n\n    TextSelectorPropFactory.prototype = {\n      getMult: function (ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue()\n        }\n        var x1 = 0\n        var y1 = 0\n        var x2 = 1\n        var y2 = 1\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0\n        } else {\n          y1 = -this.ne.v / 100.0\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        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get\n\n        var mult = 0\n        var s = this.finalS\n        var e = this.finalE\n        var type = this.data.sh\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          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            if (mult < 0.5) {\n              mult *= 2\n            } else {\n              mult = 1 - 2 * (mult - 0.5)\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;\n                    mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\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          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          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          mult = easer(mult)\n        }\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        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01\n          if (smoothness === 0) {\n            smoothness = 0.00000001\n          }\n          var threshold = 0.5 - smoothness * 0.5\n          if (mult < threshold) {\n            mult = 0\n          } else {\n            mult = (mult - threshold) / smoothness\n            if (mult > 1) {\n              mult = 1\n            }\n          }\n        }\n        return mult * this.a.v\n      },\n      getValue: function (newCharsFlag) {\n        this.iterateDynamicProperties()\n        this._mdf = newCharsFlag || this._mdf\n        this._currentTextLength = this.elem.textProperty.currentData.l.length || 0\n        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength\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        if (s > e) {\n          var _s = s\n          s = e\n          e = _s\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 = { propType: false }\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\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    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    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    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    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return\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    if (this._hasMaskedPath) {\n      mask = this._pathData.m\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v\n        if (this._pathData.r.v) {\n          paths = paths.reverse()\n        }\n        // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n        pathInfo = {\n          tLength: 0,\n          segments: [],\n        }\n        len = paths._length - 1\n        var bezierData\n        totalLength = 0\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(\n            paths.v[i],\n            paths.v[i + 1],\n            [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n            [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]],\n          )\n          pathInfo.tLength += bezierData.segmentLength\n          pathInfo.segments.push(bezierData)\n          totalLength += bezierData.segmentLength\n        }\n        i = len\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(\n            paths.v[i],\n            paths.v[0],\n            [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n            [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]],\n          )\n          pathInfo.tLength += bezierData.segmentLength\n          pathInfo.segments.push(bezierData)\n          totalLength += bezierData.segmentLength\n        }\n        this._pathData.pi = pathInfo\n      }\n      pathInfo = this._pathData.pi\n\n      currentLength = this._pathData.f.v\n      segmentInd = 0\n      pointInd = 1\n      segmentLength = 0\n      flag = true\n      segments = pathInfo.segments\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength\n        }\n        segmentInd = segments.length - 1\n        points = segments[segmentInd].points\n        pointInd = points.length - 1\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength\n          pointInd -= 1\n          if (pointInd < 0) {\n            segmentInd -= 1\n            points = segments[segmentInd].points\n            pointInd = points.length - 1\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\n    jLen = animators.length\n\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    //\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          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset\n            lastIndex += 1\n          }\n          animatorJustifyOffset = 0\n          isNewLine = true\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult\n              }\n              animatorSelector = animators[j].s\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars)\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          isNewLine = false\n        }\n      }\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset\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      if (letters[i].n) {\n        xPos = 0\n        yPos += documentData.yOffset\n        yPos += firstLine ? 1 : 0\n        currentLength = initPathPos\n        firstLine = false\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        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              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2\n                break\n              default:\n                break\n            }\n            currentLine = letters[i].line\n          }\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra\n            }\n            currentLength += letters[i].an / 2\n            ind = letters[i].ind\n          }\n          currentLength += alignment[0] * letters[i].an * 0.005\n          var animatorOffset = 0\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars)\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0]\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult\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              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0]\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult\n              }\n            }\n          }\n          flag = true\n          // Force alignment only works with a single line for now\n          if (this._pathData.a.v) {\n            currentLength =\n              letters[0].an * 0.5 +\n              ((totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind) /\n                (len - 1)\n            currentLength += this._pathData.f.v\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              if (pointInd >= points.length) {\n                pointInd = 0\n                segmentInd += 1\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              if (points) {\n                prevPoint = currentPoint\n                currentPoint = points[pointInd]\n                partialLength = currentPoint.partialLength\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)\n\n          // Grouping alignment\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          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars)\n            // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\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        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0\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        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]]\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a\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(\n                -animatorProps.a.v[0] * mult[0],\n                -animatorProps.a.v[1] * mult[1],\n                animatorProps.a.v[2] * mult[2],\n              )\n            } else {\n              matrixHelper.translate(\n                -animatorProps.a.v[0] * mult,\n                -animatorProps.a.v[1] * mult,\n                animatorProps.a.v[2] * mult,\n              )\n            }\n          }\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars)\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        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          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          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          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          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          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          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          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          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            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            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            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            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(\n                animatorProps.p.v[0] * mult[0],\n                animatorProps.p.v[1] * mult[1],\n                -animatorProps.p.v[2] * mult[2],\n              )\n            } else {\n              matrixHelper.translate(\n                animatorProps.p.v[0] * mult,\n                animatorProps.p.v[1] * mult,\n                -animatorProps.p.v[2] * mult,\n              )\n            }\n          }\n        }\n        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw\n        }\n        if (documentData.strokeColorAnim) {\n          letterSc =\n            'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')'\n        }\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc =\n            '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\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0)\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            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180\n            }\n            matrixHelper.rotate((-rot * Math.PI) / 180)\n          }\n          matrixHelper.translate(xPathPos, yPathPos, 0)\n          currentLength -= alignment[0] * letters[i].an * 0.005\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          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(\n                letters[i].animatorJustifyOffset +\n                  documentData.justifyOffset +\n                  (documentData.boxWidth - documentData.lineWidths[letters[i].line]),\n                0,\n                0,\n              )\n              break\n            case 2:\n              matrixHelper.translate(\n                letters[i].animatorJustifyOffset +\n                  documentData.justifyOffset +\n                  (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2,\n                0,\n                0,\n              )\n              break\n            default:\n              break\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        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS()\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS()\n        } else {\n          letterP = [\n            matrixHelper.props[0],\n            matrixHelper.props[1],\n            matrixHelper.props[2],\n            matrixHelper.props[3],\n            matrixHelper.props[4],\n            matrixHelper.props[5],\n            matrixHelper.props[6],\n            matrixHelper.props[7],\n            matrixHelper.props[8],\n            matrixHelper.props[9],\n            matrixHelper.props[10],\n            matrixHelper.props[11],\n            matrixHelper.props[12],\n            matrixHelper.props[13],\n            matrixHelper.props[14],\n            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 =\n          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    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    if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n      this.buildNewText()\n      this.textProperty._isFirstFrame = false\n      this.textProperty._mdf = false\n    }\n  }\n\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j\n    var jLen = shapes.length\n    var pathNodes\n    var shapeStr = ''\n    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    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    matrixHelper.translate(0, -documentData.ls, 0)\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(\n          documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]),\n          0,\n          0,\n        )\n        break\n      case 2:\n        matrixHelper.translate(\n          documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2,\n          0,\n          0,\n        )\n        break\n      default:\n        break\n    }\n    matrixHelper.translate(xPos, yPos, 0)\n  }\n\n  ITextElement.prototype.buildColor = function (colorData) {\n    return (\n      'rgb(' +\n      Math.round(colorData[0] * 255) +\n      ',' +\n      Math.round(colorData[1] * 255) +\n      ',' +\n      Math.round(colorData[2] * 255) +\n      ')'\n    )\n  }\n\n  ITextElement.prototype.emptyProp = new LetterProps()\n\n  ITextElement.prototype.destroy = function () {}\n\n  var emptyShapeData = {\n    shapes: [],\n  }\n\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = []\n    this.renderType = 'svg'\n    this.initElement(data, globalData, comp)\n  }\n\n  extendPrototype(\n    [BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement],\n    SVGTextLottieElement,\n  )\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    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      i += 1\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      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1]\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale\n          shapeItem.s.k[1] = scale\n        }\n      }\n    }\n    return data\n  }\n\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this)\n    var i\n    var len\n\n    var documentData = this.textProperty.currentData\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0)\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    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc))\n      this.layerElement.setAttribute('stroke-width', documentData.sw)\n    }\n    this.layerElement.setAttribute('font-size', documentData.finalSize)\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f)\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    this.layerElement.setAttribute('aria-label', documentData.t)\n\n    var letters = documentData.l || []\n    var usesGlyphs = !!this.globalData.fontManager.chars\n    len = letters.length\n\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    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer\n      var justify = 'start'\n      switch (documentData.j) {\n        case 1:\n          justify = 'end'\n          break\n        case 2:\n          justify = 'middle'\n          break\n        default:\n          justify = 'start'\n          break\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      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        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null,\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      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        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text')\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            if (usesGlyphs) {\n              var childSpan = createNS('g')\n              tSpan.appendChild(childSpan)\n              this.textSpans[i].childSpan = childSpan\n            }\n            this.textSpans[i].span = tSpan\n            this.layerElement.appendChild(tSpan)\n          }\n          tSpan.style.display = 'inherit'\n        }\n\n        matrixHelper.reset()\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          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos)\n          xPos += letters[i].l || 0\n          // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n          xPos += trackingOffset\n        }\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(\n            documentData.finalText[i],\n            fontData.fStyle,\n            this.globalData.fontManager.getFontByName(documentData.f).fFamily,\n          )\n          var glyphElement\n          // t === 1 means the character has been replaced with an animated shaped\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this)\n          } else {\n            var data = emptyShapeData\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize)\n            }\n            glyphElement = new SVGShapeElement(data, this.globalData, this)\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          this.textSpans[i].glyph = glyphElement\n          glyphElement._debug = true\n          glyphElement.prepareFrame(0)\n          glyphElement.renderFrame()\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement)\n          // 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          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute(\n              'transform',\n              'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')',\n            )\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')')\n          }\n          tSpan.textContent = letters[i].val\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve')\n        }\n        //\n      }\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr)\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    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    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    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st)\n        if (glyphElement._mdf) {\n          this._mdf = true\n        }\n      }\n    }\n  }\n\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag)\n      if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n        this._sizeChanged = true\n        var i\n        var len\n        var renderedLetters = this.textAnimator.renderedLetters\n\n        var letters = this.textProperty.currentData.l\n\n        len = letters.length\n        var renderedLetter\n        var textSpan\n        var glyphElement\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            if (glyphElement) {\n              glyphElement.renderFrame()\n            }\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m)\n            }\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o)\n            }\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw)\n            }\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc)\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  extendPrototype([IImageElement], ISolidElement)\n\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect')\n    /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\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    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    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width)\n    }\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height)\n    }\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className)\n    }\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id)\n    }\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable)\n    }\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio)\n    // 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    this.animationItem.wrapper.appendChild(this.svgElement)\n    // Mask animation\n    var defs = this.globalData.defs\n\n    this.setupGlobalData(animData, defs)\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad\n    this.data = animData\n\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\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    this.layerElement = null\n    this.globalData.defs = null\n    var i\n    var len = this.layers ? this.layers.length : 0\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy()\n      }\n    }\n    this.elements.length = 0\n    this.destroyed = true\n    this.animationItem = null\n  }\n\n  SVGRendererBase.prototype.updateContainerSize = function () {}\n\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return\n    }\n    elements[pos] = true\n    var element = this.createItem(this.layers[pos])\n\n    elements[pos] = element\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element)\n      }\n      element.initExpressions()\n    }\n    this.appendElementInPos(element, pos)\n    if (this.layers[pos].tt) {\n      if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n        this.buildItem(pos - 1)\n        this.addPendingElement(element)\n      } else {\n        element.setMatte(elements[pos - 1].layerId)\n      }\n    }\n  }\n\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop()\n      element.checkParenting()\n      if (element.data.tt) {\n        var i = 0\n        var len = this.elements.length\n        while (i < len) {\n          if (this.elements[i] === element) {\n            element.setMatte(this.elements[i - 1].layerId)\n            break\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    if (num === null) {\n      num = this.renderedFrame\n    } else {\n      this.renderedFrame = num\n    }\n    // console.log('-------');\n    // console.log('FRAME ',num);\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    if (!this.completeLayers) {\n      this.checkLayers(num)\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    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    if (!newElement) {\n      return\n    }\n    var i = 0\n    var nextElement\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      i += 1\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    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems()\n    }\n    this.hide()\n  }\n\n  /* ICompElement.prototype.hide = function(){\n    if(!this.hidden){\n        this.hideElement();\n        var i,len = this.elements.length;\n        for( i = 0; i < len; i+=1 ){\n            if(this.elements[i]){\n                this.elements[i].hide();\n            }\n        }\n    }\n}; */\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false\n    this.prepareRenderableFrame(num)\n    this.prepareProperties(num, this.isInRange)\n    if (!this.isInRange && !this.data.xt) {\n      return\n    }\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1\n      }\n      this.renderedFrame = timeRemapped\n    } else {\n      this.renderedFrame = num / this.data.sr\n    }\n    var i\n    var len = this.elements.length\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame)\n    }\n    // This iteration needs to be backwards because of how expressions connect between each other\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        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    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    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) : { _placeholder: true }\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    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    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    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel)\n    }\n    var defs = createNS('defs')\n    this.svgElement.appendChild(defs)\n    var maskElement = createNS('g')\n    this.svgElement.appendChild(maskElement)\n    this.layerElement = maskElement\n    this.renderConfig = {\n      preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n      imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n      contentVisibility: (config && config.contentVisibility) || 'visible',\n      progressiveLoad: (config && config.progressiveLoad) || false,\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      viewBoxOnly: (config && config.viewBoxOnly) || false,\n      viewBoxSize: (config && config.viewBoxSize) || false,\n      className: (config && config.className) || '',\n      id: (config && config.id) || '',\n      focusable: config && config.focusable,\n      filterSize: {\n        width: (config && config.filterSize && config.filterSize.width) || '100%',\n        height: (config && config.filterSize && config.filterSize.height) || '100%',\n        x: (config && config.filterSize && config.filterSize.x) || '0%',\n        y: (config && config.filterSize && config.filterSize.y) || '0%',\n      },\n      width: config && config.width,\n      height: config && config.height,\n    }\n\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig,\n    }\n    this.elements = []\n    this.pendingElements = []\n    this.destroyed = false\n    this.rendererType = 'svg'\n  }\n\n  extendPrototype([SVGRendererBase], SVGRenderer)\n\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this)\n  }\n\n  function CVContextData() {\n    this.saved = []\n    this.cArrPos = 0\n    this.cTr = new Matrix()\n    this.cO = 1\n    var i\n    var len = 15\n    this.savedOp = createTypedArray('float32', len)\n    for (i = 0; i < len; i += 1) {\n      this.saved[i] = createTypedArray('float32', 16)\n    }\n    this._length = len\n  }\n\n  CVContextData.prototype.duplicate = function () {\n    var newLength = this._length * 2\n    var currentSavedOp = this.savedOp\n    this.savedOp = createTypedArray('float32', newLength)\n    this.savedOp.set(currentSavedOp)\n    var i = 0\n    for (i = this._length; i < newLength; i += 1) {\n      this.saved[i] = createTypedArray('float32', 16)\n    }\n    this._length = newLength\n  }\n\n  CVContextData.prototype.reset = function () {\n    this.cArrPos = 0\n    this.cTr.reset()\n    this.cO = 1\n  }\n\n  function ShapeTransformManager() {\n    this.sequences = {}\n    this.sequenceList = []\n    this.transform_key_count = 0\n  }\n\n  ShapeTransformManager.prototype = {\n    addTransformSequence: function (transforms) {\n      var i\n      var len = transforms.length\n      var key = '_'\n      for (i = 0; i < len; i += 1) {\n        key += transforms[i].transform.key + '_'\n      }\n      var sequence = this.sequences[key]\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      return sequence\n    },\n    processSequence: function (sequence, isFirstFrame) {\n      var i = 0\n      var len = sequence.transforms.length\n      var _mdf = isFirstFrame\n      while (i < len && !isFirstFrame) {\n        if (sequence.transforms[i].transform.mProps._mdf) {\n          _mdf = true\n          break\n        }\n        i += 1\n      }\n      if (_mdf) {\n        var props\n        sequence.finalTransform.reset()\n        for (i = len - 1; i >= 0; i -= 1) {\n          props = sequence.transforms[i].transform.mProps.v.props\n          sequence.finalTransform.transform(\n            props[0],\n            props[1],\n            props[2],\n            props[3],\n            props[4],\n            props[5],\n            props[6],\n            props[7],\n            props[8],\n            props[9],\n            props[10],\n            props[11],\n            props[12],\n            props[13],\n            props[14],\n            props[15],\n          )\n        }\n      }\n      sequence._mdf = _mdf\n    },\n    processSequences: function (isFirstFrame) {\n      var i\n      var len = this.sequenceList.length\n      for (i = 0; i < len; i += 1) {\n        this.processSequence(this.sequenceList[i], isFirstFrame)\n      }\n    },\n    getNewKey: function () {\n      this.transform_key_count += 1\n      return '_' + this.transform_key_count\n    },\n  }\n\n  function CVEffects() {}\n  CVEffects.prototype.renderFrame = function () {}\n\n  function CVMaskElement(data, element) {\n    this.data = data\n    this.element = element\n    this.masksProperties = this.data.masksProperties || []\n    this.viewData = createSizedArray(this.masksProperties.length)\n    var i\n    var len = this.masksProperties.length\n    var hasMasks = false\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        hasMasks = true\n      }\n      this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3)\n    }\n    this.hasMasks = hasMasks\n    if (hasMasks) {\n      this.element.addRenderableComponent(this)\n    }\n  }\n\n  CVMaskElement.prototype.renderFrame = function () {\n    if (!this.hasMasks) {\n      return\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    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        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        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        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    this.element.globalData.renderer.save(true)\n    ctx.clip()\n  }\n\n  CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty\n\n  CVMaskElement.prototype.destroy = function () {\n    this.element = null\n  }\n\n  function CVBaseElement() {}\n\n  CVBaseElement.prototype = {\n    createElements: function () {},\n    initRendererElement: function () {},\n    createContainerElements: function () {\n      this.canvasContext = this.globalData.canvasContext\n      this.renderableEffectsManager = new CVEffects(this)\n    },\n    createContent: function () {},\n    setBlendMode: function () {\n      var globalData = this.globalData\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 () {\n      this.maskManager = new CVMaskElement(this.data, this)\n    },\n    hideElement: function () {\n      if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n        this.hidden = true\n      }\n    },\n    showElement: function () {\n      if (this.isInRange && !this.isTransparent) {\n        this.hidden = false\n        this._isFirstFrame = true\n        this.maskManager._isFirstFrame = true\n      }\n    },\n    renderFrame: function () {\n      if (this.hidden || this.data.hd) {\n        return\n      }\n      this.renderTransform()\n      this.renderRenderable()\n      this.setBlendMode()\n      var forceRealStack = this.data.ty === 0\n      this.globalData.renderer.save(forceRealStack)\n      this.globalData.renderer.ctxTransform(this.finalTransform.mat.props)\n      this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v)\n      this.renderInnerContent()\n      this.globalData.renderer.restore(forceRealStack)\n      if (this.maskManager.hasMasks) {\n        this.globalData.renderer.restore(true)\n      }\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false\n      }\n    },\n    destroy: function () {\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    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    this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element)\n    var i\n    var len = styles.length\n    var styledShape\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(\n    [BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement],\n    CVShapeElement,\n  )\n\n  CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement\n\n  CVShapeElement.prototype.transformHelper = { opacity: 1, _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    if (data.ty === 'fl' || data.ty === 'st') {\n      elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this)\n      if (!elementData.c.k) {\n        styleElem.co =\n          'rgb(' +\n          bmFloor(elementData.c.v[0]) +\n          ',' +\n          bmFloor(elementData.c.v[1]) +\n          ',' +\n          bmFloor(elementData.c.v[2]) +\n          ')'\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 || { k: 0 }, 0, 0.01, this)\n      elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this)\n      elementData.g = new GradientProperty(this, data.g, this)\n    }\n    elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this)\n    if (data.ty === 'st' || data.ty === 'gs') {\n      styleElem.lc = lineCapEnum[data.lc || 2]\n      styleElem.lj = lineJoinEnum[data.lj || 2]\n      if (data.lj == 1) {\n        // eslint-disable-line eqeqeq\n        styleElem.ml = data.ml\n      }\n      elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this)\n      if (!elementData.w.k) {\n        styleElem.wi = elementData.w.v\n      }\n      if (data.d) {\n        var d = new DashProperty(this, data.d, 'canvas', this)\n        elementData.d = d\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    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\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    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i]\n    }\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, [])\n    len = this.dynamicProperties.length\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue()\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    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    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    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    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i])\n      if (!processedPos) {\n        arr[i]._shouldRender = shouldRender\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1]\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          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j]\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        ownTransforms.push(itemsData[i])\n        this.addTransformToStyleList(itemsData[i])\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i])\n        }\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty)\n          modifier.init(this, arr[i])\n          itemsData[i] = modifier\n          this.shapeModifiers.push(modifier)\n        } else {\n          modifier = itemsData[i]\n          modifier.closed = false\n        }\n        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        ownModifiers.push(modifier)\n      }\n      this.addProcessedElement(arr[i], i + 1)\n    }\n    this.removeTransformFromStyleList()\n    this.closeStyles(ownStyles)\n    len = ownModifiers.length\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    for (i = 0; i < len; i += 1) {\n      currentStyle = this.stylesList[i]\n      type = currentStyle.type\n\n      // 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      if (\n        !(\n          ((type === 'st' || type === 'gs') && currentStyle.wi === 0) ||\n          !currentStyle.data._shouldRender ||\n          currentStyle.coOp === 0 ||\n          this.globalData.currentGlobalAlpha === 0\n        )\n      ) {\n        renderer.save()\n        elems = currentStyle.elements\n        if (type === 'st' || type === 'gs') {\n          ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd\n          ctx.lineWidth = currentStyle.wi\n          ctx.lineCap = currentStyle.lc\n          ctx.lineJoin = currentStyle.lj\n          ctx.miterLimit = currentStyle.ml || 0\n        } else {\n          ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd\n        }\n        renderer.ctxOpacity(currentStyle.coOp)\n        if (type !== 'st' && type !== 'gs') {\n          ctx.beginPath()\n        }\n        renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props)\n        jLen = elems.length\n        for (j = 0; j < jLen; j += 1) {\n          if (type === 'st' || type === 'gs') {\n            ctx.beginPath()\n            if (currentStyle.da) {\n              ctx.setLineDash(currentStyle.da)\n              ctx.lineDashOffset = currentStyle.do\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(\n                nodes[k].pts[0],\n                nodes[k].pts[1],\n                nodes[k].pts[2],\n                nodes[k].pts[3],\n                nodes[k].pts[4],\n                nodes[k].pts[5],\n              )\n            } else {\n              ctx.closePath()\n            }\n          }\n          if (type === 'st' || type === 'gs') {\n            ctx.stroke()\n            if (currentStyle.da) {\n              ctx.setLineDash(this.dashResetter)\n            }\n          }\n        }\n        if (type !== 'st' && type !== 'gs') {\n          ctx.fill(currentStyle.r)\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    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      for (j = 0; j < jLen; j += 1) {\n        var pathNodes = paths.shapes[j]\n        if (pathNodes && pathNodes.v) {\n          len = pathNodes._length\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            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]),\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          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      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      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 =\n        'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'\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    if (\n      !styleElem.grd ||\n      itemData.g._mdf ||\n      itemData.s._mdf ||\n      itemData.e._mdf ||\n      (styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf))\n    ) {\n      var ctx = this.globalData.canvasContext\n      var pt1 = itemData.s.v\n      var pt2 = itemData.e.v\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\n        var percent = itemData.h.v\n        if (percent >= 1) {\n          percent = 0.99\n        } else if (percent <= -1) {\n          percent = -0.99\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        grd.addColorStop(\n          cValues[i * 4] / 100,\n          'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')',\n        )\n      }\n      styleElem.grd = grd\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    if (d && (d._mdf || this._isFirstFrame)) {\n      styleElem.da = d.dashArray\n      styleElem.do = d.dashoffset[0]\n    }\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co =\n        'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'\n    }\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity\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  extendPrototype(\n    [BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement],\n    CVTextElement,\n  )\n\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\n    var hasFill = false\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    this.fill = hasFill\n    var hasStroke = false\n    if (documentData.sc) {\n      hasStroke = true\n      this.values.stroke = this.buildColor(documentData.sc)\n      this.values.sWidth = documentData.sw\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 =\n      documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily\n    len = documentData.finalText.length\n    // this.tHelper.font = this.values.fValue;\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    for (i = 0; i < len; i += 1) {\n      charData = this.globalData.fontManager.getCharData(\n        documentData.finalText[i],\n        fontData.fStyle,\n        this.globalData.fontManager.getFontByName(documentData.f).fFamily,\n      )\n      shapeData = (charData && charData.data) || {}\n      matrixHelper.reset()\n      if (singleShape && letters[i].n) {\n        xPos = -trackingOffset\n        yPos += documentData.yOffset\n        yPos += firstLine ? 1 : 0\n        firstLine = false\n      }\n      shapes = shapeData.shapes ? shapeData.shapes[0].it : []\n      jLen = shapes.length\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100)\n      if (singleShape) {\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos)\n      }\n      commands = createSizedArray(jLen - 1)\n      var commandsCounter = 0\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          for (k = 1; k < kLen; k += 1) {\n            if (k === 1) {\n              pathArr.push(\n                matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n                matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n              )\n            }\n            pathArr.push(\n              matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0),\n              matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0),\n              matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0),\n              matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0),\n              matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0),\n              matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0),\n            )\n          }\n          pathArr.push(\n            matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0),\n            matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0),\n            matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0),\n            matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0),\n            matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n            matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n          )\n          commands[commandsCounter] = pathArr\n          commandsCounter += 1\n        }\n      }\n      if (singleShape) {\n        xPos += letters[i].l\n        xPos += trackingOffset\n      }\n      if (this.textSpans[cnt]) {\n        this.textSpans[cnt].elem = commands\n      } else {\n        this.textSpans[cnt] = { elem: commands }\n      }\n      cnt += 1\n    }\n  }\n\n  CVTextElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext\n    ctx.font = this.values.fValue\n    ctx.lineCap = 'butt'\n    ctx.lineJoin = 'miter'\n    ctx.miterLimit = 4\n\n    if (!this.data.singleShape) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag)\n    }\n\n    var i\n    var len\n    var j\n    var jLen\n    var k\n    var kLen\n    var renderedLetters = this.textAnimator.renderedLetters\n\n    var letters = this.textProperty.currentData.l\n\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    for (i = 0; i < len; i += 1) {\n      if (!letters[i].n) {\n        renderedLetter = renderedLetters[i]\n        if (renderedLetter) {\n          this.globalData.renderer.save()\n          this.globalData.renderer.ctxTransform(renderedLetter.p)\n          this.globalData.renderer.ctxOpacity(renderedLetter.o)\n        }\n        if (this.fill) {\n          if (renderedLetter && renderedLetter.fc) {\n            if (lastFill !== renderedLetter.fc) {\n              lastFill = renderedLetter.fc\n              ctx.fillStyle = renderedLetter.fc\n            }\n          } else if (lastFill !== this.values.fill) {\n            lastFill = this.values.fill\n            ctx.fillStyle = this.values.fill\n          }\n          commands = this.textSpans[i].elem\n          jLen = commands.length\n          this.globalData.canvasContext.beginPath()\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            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(\n                pathArr[k],\n                pathArr[k + 1],\n                pathArr[k + 2],\n                pathArr[k + 3],\n                pathArr[k + 4],\n                pathArr[k + 5],\n              )\n            }\n          }\n          this.globalData.canvasContext.closePath()\n          this.globalData.canvasContext.fill()\n          /// ctx.fillText(this.textSpans[i].val,0,0);\n        }\n        if (this.stroke) {\n          if (renderedLetter && renderedLetter.sw) {\n            if (lastStrokeW !== renderedLetter.sw) {\n              lastStrokeW = renderedLetter.sw\n              ctx.lineWidth = renderedLetter.sw\n            }\n          } else if (lastStrokeW !== this.values.sWidth) {\n            lastStrokeW = this.values.sWidth\n            ctx.lineWidth = this.values.sWidth\n          }\n          if (renderedLetter && renderedLetter.sc) {\n            if (lastStroke !== renderedLetter.sc) {\n              lastStroke = renderedLetter.sc\n              ctx.strokeStyle = renderedLetter.sc\n            }\n          } else if (lastStroke !== this.values.stroke) {\n            lastStroke = this.values.stroke\n            ctx.strokeStyle = this.values.stroke\n          }\n          commands = this.textSpans[i].elem\n          jLen = commands.length\n          this.globalData.canvasContext.beginPath()\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            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(\n                pathArr[k],\n                pathArr[k + 1],\n                pathArr[k + 2],\n                pathArr[k + 3],\n                pathArr[k + 4],\n                pathArr[k + 5],\n              )\n            }\n          }\n          this.globalData.canvasContext.closePath()\n          this.globalData.canvasContext.stroke()\n          /// ctx.strokeText(letters[i].val,0,0);\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  extendPrototype(\n    [BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement],\n    CVImageElement,\n  )\n\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\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      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      ctx.drawImage(\n        this.img,\n        (imgW - widthCrop) / 2,\n        (imgH - heightCrop) / 2,\n        widthCrop,\n        heightCrop,\n        0,\n        0,\n        this.assetData.w,\n        this.assetData.h,\n      )\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  extendPrototype(\n    [BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement],\n    CVSolidElement,\n  )\n\n  CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement\n  CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame\n\n  CVSolidElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext\n    ctx.fillStyle = this.data.sc\n    ctx.fillRect(0, 0, this.data.sw, this.data.sh)\n    //\n  }\n\n  function CanvasRendererBase(animationItem, config) {\n    this.animationItem = animationItem\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: (config && config.context) || null,\n      progressiveLoad: (config && config.progressiveLoad) || false,\n      preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n      imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n      contentVisibility: (config && config.contentVisibility) || 'visible',\n      className: (config && config.className) || '',\n      id: (config && config.id) || '',\n    }\n    this.renderConfig.dpr = (config && config.dpr) || 1\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1\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  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    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13])\n      return\n    }\n    this.transformMat.cloneFromProps(props)\n    var cProps = this.contextData.cTr.props\n    this.transformMat.transform(\n      cProps[0],\n      cProps[1],\n      cProps[2],\n      cProps[3],\n      cProps[4],\n      cProps[5],\n      cProps[6],\n      cProps[7],\n      cProps[8],\n      cProps[9],\n      cProps[10],\n      cProps[11],\n      cProps[12],\n      cProps[13],\n      cProps[14],\n      cProps[15],\n    )\n    // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n    this.contextData.cTr.cloneFromProps(this.transformMat.props)\n    var trProps = this.contextData.cTr.props\n    this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13])\n  }\n\n  CanvasRendererBase.prototype.ctxOpacity = function (op) {\n    /* if(op === 1){\n        return;\n    } */\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.globalAlpha *= op < 0 ? 0 : op\n      this.globalData.currentGlobalAlpha = this.contextData.cO\n      return\n    }\n    this.contextData.cO *= op < 0 ? 0 : op\n    if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n      this.canvasContext.globalAlpha = this.contextData.cO\n      this.globalData.currentGlobalAlpha = this.contextData.cO\n    }\n  }\n\n  CanvasRendererBase.prototype.reset = function () {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore()\n      return\n    }\n    this.contextData.reset()\n  }\n\n  CanvasRendererBase.prototype.save = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.save()\n      return\n    }\n    if (actionFlag) {\n      this.canvasContext.save()\n    }\n    var props = this.contextData.cTr.props\n    if (this.contextData._length <= this.contextData.cArrPos) {\n      this.contextData.duplicate()\n    }\n    var i\n    var arr = this.contextData.saved[this.contextData.cArrPos]\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = props[i]\n    }\n    this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO\n    this.contextData.cArrPos += 1\n  }\n\n  CanvasRendererBase.prototype.restore = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore()\n      return\n    }\n    if (actionFlag) {\n      this.canvasContext.restore()\n      this.globalData.blendMode = 'source-over'\n    }\n    this.contextData.cArrPos -= 1\n    var popped = this.contextData.saved[this.contextData.cArrPos]\n    var i\n    var arr = this.contextData.cTr.props\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = popped[i]\n    }\n    this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13])\n    popped = this.contextData.savedOp[this.contextData.cArrPos]\n    this.contextData.cO = popped\n    if (this.globalData.currentGlobalAlpha !== popped) {\n      this.canvasContext.globalAlpha = popped\n      this.globalData.currentGlobalAlpha = popped\n    }\n  }\n\n  CanvasRendererBase.prototype.configAnimation = function (animData) {\n    if (this.animationItem.wrapper) {\n      this.animationItem.container = createTag('canvas')\n      var containerStyle = this.animationItem.container.style\n      containerStyle.width = '100%'\n      containerStyle.height = '100%'\n      var origin = '0px 0px 0px'\n      containerStyle.transformOrigin = origin\n      containerStyle.mozTransformOrigin = origin\n      containerStyle.webkitTransformOrigin = origin\n      containerStyle['-webkit-transform'] = origin\n      containerStyle.contentVisibility = this.renderConfig.contentVisibility\n      this.animationItem.wrapper.appendChild(this.animationItem.container)\n      this.canvasContext = this.animationItem.container.getContext('2d')\n      if (this.renderConfig.className) {\n        this.animationItem.container.setAttribute('class', this.renderConfig.className)\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    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\n    this.updateContainerSize()\n  }\n\n  CanvasRendererBase.prototype.updateContainerSize = function () {\n    this.reset()\n    var elementWidth\n    var elementHeight\n    if (this.animationItem.wrapper && this.animationItem.container) {\n      elementWidth = this.animationItem.wrapper.offsetWidth\n      elementHeight = this.animationItem.wrapper.offsetHeight\n      this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr)\n      this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr)\n    } else {\n      elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr\n      elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr\n    }\n    var elementRel\n    var animationRel\n    if (\n      this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 ||\n      this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1\n    ) {\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      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 (\n        xPos === 'xMid' &&\n        ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))\n      ) {\n        this.transformCanvas.tx =\n          ((elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2) *\n          this.renderConfig.dpr\n      } else if (\n        xPos === 'xMax' &&\n        ((animationRel < elementRel && fillType === 'meet') || (animationRel > elementRel && fillType === 'slice'))\n      ) {\n        this.transformCanvas.tx =\n          (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr\n      } else {\n        this.transformCanvas.tx = 0\n      }\n      if (\n        yPos === 'YMid' &&\n        ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))\n      ) {\n        this.transformCanvas.ty =\n          ((elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2) *\n          this.renderConfig.dpr\n      } else if (\n        yPos === 'YMax' &&\n        ((animationRel > elementRel && fillType === 'meet') || (animationRel < elementRel && fillType === 'slice'))\n      ) {\n        this.transformCanvas.ty =\n          (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    this.transformCanvas.props = [\n      this.transformCanvas.sx,\n      0,\n      0,\n      0,\n      0,\n      this.transformCanvas.sy,\n      0,\n      0,\n      0,\n      0,\n      1,\n      0,\n      this.transformCanvas.tx,\n      this.transformCanvas.ty,\n      0,\n      1,\n    ]\n    /* var i, len = this.elements.length;\n    for(i=0;i<len;i+=1){\n        if(this.elements[i] && this.elements[i].data.ty === 0){\n            this.elements[i].resize(this.globalData.transformCanvas);\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\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    var i\n    var len = this.layers ? this.layers.length : 0\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy()\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 (\n      (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender) ||\n      this.destroyed ||\n      num === -1\n    ) {\n      return\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\n\n    // console.log('--------');\n    // console.log('NEW: ',num);\n    var i\n    var len = this.layers.length\n    if (!this.completeLayers) {\n      this.checkLayers(num)\n    }\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st)\n      }\n    }\n    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      for (i = len - 1; i >= 0; i -= 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame()\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    if (elements[pos] || this.layers[pos].ty === 99) {\n      return\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){\n        element.resize(this.globalData.transformCanvas);\n    } */\n  }\n\n  CanvasRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop()\n      element.checkParenting()\n    }\n  }\n\n  CanvasRendererBase.prototype.hide = function () {\n    this.animationItem.container.style.display = 'none'\n  }\n\n  CanvasRendererBase.prototype.show = function () {\n    this.animationItem.container.style.display = 'block'\n  }\n\n  function CVCompElement(data, globalData, comp) {\n    this.completeLayers = false\n    this.layers = data.layers\n    this.pendingElements = []\n    this.elements = createSizedArray(this.layers.length)\n    this.initElement(data, globalData, comp)\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }\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    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    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy()\n      }\n    }\n    this.layers = null\n    this.elements = null\n  }\n\n  CVCompElement.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this)\n  }\n\n  function CanvasRenderer(animationItem, config) {\n    this.animationItem = animationItem\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: (config && config.context) || null,\n      progressiveLoad: (config && config.progressiveLoad) || false,\n      preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\n      imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',\n      contentVisibility: (config && config.contentVisibility) || 'visible',\n      className: (config && config.className) || '',\n      id: (config && config.id) || '',\n    }\n    this.renderConfig.dpr = (config && config.dpr) || 1\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1\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  extendPrototype([CanvasRendererBase], CanvasRenderer)\n\n  CanvasRenderer.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this)\n  }\n\n  // Registering renderers\n  registerRenderer('canvas', CanvasRenderer)\n\n  // Registering shape modifiers\n  ShapeModifiers.registerModifier('tm', TrimModifier)\n  ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier)\n  ShapeModifiers.registerModifier('rp', RepeaterModifier)\n  ShapeModifiers.registerModifier('rd', RoundCornersModifier)\n\n  const Expressions = (function () {\n    var ob = {}\n    ob.initExpressions = initExpressions\n\n    function initExpressions(animation) {\n      var stackCount = 0\n      var registers = []\n\n      function pushExpression() {\n        stackCount += 1\n      }\n\n      function popExpression() {\n        stackCount -= 1\n        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        for (i = 0; i < len; i += 1) {\n          registers[i].release()\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    return ob\n  })()\n\n  /* eslint-disable */\n  /*\n Copyright 2014 David Bau.\n\n Permission is hereby granted, free of charge, to any person obtaining\n a copy of this software and associated documentation files (the\n \"Software\"), to deal in the Software without restriction, including\n without limitation the rights to use, copy, modify, merge, publish,\n distribute, sublicense, and/or sell copies of the Software, and to\n permit persons to whom the Software is furnished to do so, subject to\n the following conditions:\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n */\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, // each RC4 output is 0 <= x < 256\n      chunks = 6, // at least six RC4 outputs for each double\n      digits = 52, // there are 52 significant digits in a double\n      rngname = 'random', // 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    //\n    // seedrandom()\n    // This is the seedrandom function described above.\n    //\n    function seedrandom(seed, options, callback) {\n      var key = []\n      options = options === true ? { entropy: true } : options || {}\n\n      // Flatten the seed string or build one from local entropy if needed.\n      var shortseed = mixkey(\n        flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3),\n        key,\n      )\n\n      // Use the seed to initialize an ARC4 generator.\n      var arc4 = new ARC4(key)\n\n      // 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      var prng = function () {\n        var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n          d = startdenom, //   and denominator d = 2 ^ 48.\n          x = 0 //   and no 'extra last byte'.\n        while (n < significance) {\n          // Fill up all significant digits by\n          n = (n + x) * width //   shifting numerator and\n          d *= width //   denominator and generating a\n          x = arc4.g(1) //   new least-significant-byte.\n        }\n        while (n >= overflow) {\n          // To avoid rounding up, before adding\n          n /= 2 //   last byte, shift everything\n          d /= 2 //   right using integer math until\n          x >>>= 1 //   we have exactly the desired bits.\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      prng.quick = function () {\n        return arc4.g(4) / 0x100000000\n      }\n      prng.double = prng\n\n      // Mix the randomness into accumulated entropy.\n      mixkey(tostring(arc4.S), pool)\n\n      // Calling convention: what to return as a function of prng, seed, is_math.\n      return (\n        options.pass ||\n        callback ||\n        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            }\n            // Only provide the .state method if requested via options.state.\n            prng.state = function () {\n              return copy(arc4, {})\n            }\n          }\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          if (is_math_call) {\n            math[rngname] = prng\n            return seed\n          }\n\n          // Otherwise, it is a newer calling convention, so return the\n          // prng directly.\n          else return prng\n        }\n      )(prng, shortseed, 'global' in options ? options.global : this == math, options.state)\n    }\n    math['seed' + rngname] = seedrandom\n\n    //\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    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 = [])\n\n      // The empty key [] is treated as [0].\n      if (!keylen) {\n        key = [keylen++]\n      }\n\n      // Set up S using the standard key scheduling algorithm.\n      while (i < width) {\n        s[i] = i++\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      }\n\n      // The \"g\" method returns the next (count) outputs as one number.\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        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        me.i = i\n        me.j = j\n        return r\n        // 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\n    //\n    // copy()\n    // Copies internal state of ARC4 to or from a plain object.\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\n    //\n    // flatten()\n    // Converts an object tree to nested arrays of strings.\n    //\n    function flatten(obj, depth) {\n      var result = [],\n        typ = typeof obj,\n        prop\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      return result.length ? result : typ == 'string' ? obj : obj + '\\0'\n    }\n\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    function mixkey(seed, key) {\n      var stringseed = seed + '',\n        smear,\n        j = 0\n      while (j < stringseed.length) {\n        key[mask & j] = mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++))\n      }\n      return tostring(key)\n    }\n\n    //\n    // autoseed()\n    // Returns an object for autoseeding, using window.crypto and Node crypto\n    // module if available.\n    //\n    function autoseed() {\n      try {\n        if (nodecrypto) {\n          return tostring(nodecrypto.randomBytes(width))\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\n    //\n    // tostring()\n    // Converts an array of charcodes to a string\n    //\n    function tostring(a) {\n      return String.fromCharCode.apply(0, a)\n    }\n\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    mixkey(math.random(), pool)\n\n    //\n    // Nodejs and AMD support: export the implementation as a module using\n    // either convention.\n    //\n\n    // End anonymous scope, and pass initial values.\n  }\n\n  function initialize$2(BMMath) {\n    seedRandom([], BMMath)\n  }\n\n  var propTypes = {\n    SHAPE: 'shape',\n  }\n\n  /* eslint-disable camelcase */\n\n  const ExpressionManager = (function () {\n    'use strict'\n\n    var ob = {}\n    var Math = BMMath\n    var window = null\n    var document = null\n    var XMLHttpRequest = null\n    var fetch = null\n    var frames = null\n    initialize$2(BMMath)\n\n    function $bm_isInstanceOfArray(arr) {\n      return arr.constructor === Array || arr.constructor === Float32Array\n    }\n\n    function isNumerable(tOfV, v) {\n      return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number\n    }\n\n    function $bm_neg(a) {\n      var tOfA = typeof a\n      if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n        return -a\n      }\n      if ($bm_isInstanceOfArray(a)) {\n        var i\n        var lenA = a.length\n        var retArr = []\n        for (i = 0; i < lenA; i += 1) {\n          retArr[i] = -a[i]\n        }\n        return retArr\n      }\n      if (a.propType) {\n        return a.v\n      }\n      return -a\n    }\n\n    var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get\n    var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get\n    var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get\n\n    function sum(a, b) {\n      var tOfA = typeof a\n      var tOfB = typeof b\n      if (tOfA === 'string' || tOfB === 'string') {\n        return a + b\n      }\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a + b\n      }\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0)\n        a[0] += b\n        return a\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      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        while (i < lenA || i < lenB) {\n          if (\n            (typeof a[i] === 'number' || a[i] instanceof Number) &&\n            (typeof b[i] === 'number' || b[i] instanceof Number)\n          ) {\n            retArr[i] = a[i] + b[i]\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i]\n          }\n          i += 1\n        }\n        return retArr\n      }\n      return 0\n    }\n    var add = sum\n\n    function sub(a, b) {\n      var tOfA = typeof a\n      var tOfB = typeof b\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        if (tOfA === 'string') {\n          a = parseInt(a, 10)\n        }\n        if (tOfB === 'string') {\n          b = parseInt(b, 10)\n        }\n        return a - b\n      }\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0)\n        a[0] -= b\n        return a\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      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        while (i < lenA || i < lenB) {\n          if (\n            (typeof a[i] === 'number' || a[i] instanceof Number) &&\n            (typeof b[i] === 'number' || b[i] instanceof Number)\n          ) {\n            retArr[i] = a[i] - b[i]\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i]\n          }\n          i += 1\n        }\n        return retArr\n      }\n      return 0\n    }\n\n    function mul(a, b) {\n      var tOfA = typeof a\n      var tOfB = typeof b\n      var arr\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a * b\n      }\n\n      var i\n      var len\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length\n        arr = createTypedArray('float32', len)\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] * b\n        }\n        return arr\n      }\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length\n        arr = createTypedArray('float32', len)\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a * b[i]\n        }\n        return arr\n      }\n      return 0\n    }\n\n    function div(a, b) {\n      var tOfA = typeof a\n      var tOfB = typeof b\n      var arr\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a / b\n      }\n      var i\n      var len\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length\n        arr = createTypedArray('float32', len)\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] / b\n        }\n        return arr\n      }\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length\n        arr = createTypedArray('float32', len)\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a / b[i]\n        }\n        return arr\n      }\n      return 0\n    }\n    function mod(a, b) {\n      if (typeof a === 'string') {\n        a = parseInt(a, 10)\n      }\n      if (typeof b === 'string') {\n        b = parseInt(b, 10)\n      }\n      return a % b\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      return Math.min(Math.max(num, min), max)\n    }\n\n    function radiansToDegrees(val) {\n      return val / degToRads\n    }\n    var radians_to_degrees = radiansToDegrees\n\n    function degreesToRadians(val) {\n      return val * degToRads\n    }\n    var degrees_to_radians = radiansToDegrees\n\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      if (!arr2) {\n        arr2 = helperLengthArray\n      }\n      var i\n      var len = Math.min(arr1.length, arr2.length)\n      var addedLength = 0\n      for (i = 0; i < len; i += 1) {\n        addedLength += Math.pow(arr2[i] - arr1[i], 2)\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        s = 0 // achromatic\n      } else {\n        var d = max - min\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0)\n            break\n          case g:\n            h = (b - r) / d + 2\n            break\n          case b:\n            h = (r - g) / d + 4\n            break\n          default:\n            break\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\n      var r\n      var g\n      var b\n\n      if (s === 0) {\n        r = l // achromatic\n        b = l // achromatic\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      if (tMax < tMin) {\n        var _tMin = tMax\n        tMax = tMin\n        tMin = _tMin\n      }\n      if (t <= tMin) {\n        return value1\n      }\n      if (t >= tMax) {\n        return value2\n      }\n      var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin)\n      if (!value1.length) {\n        return value1 + (value2 - value1) * perc\n      }\n      var i\n      var len = value1.length\n      var arr = createTypedArray('float32', len)\n      for (i = 0; i < len; i += 1) {\n        arr[i] = value1[i] + (value2[i] - value1[i]) * perc\n      }\n      return arr\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      if (max.length) {\n        var i\n        var len = max.length\n        if (!min) {\n          min = createTypedArray('float32', len)\n        }\n        var arr = createTypedArray('float32', len)\n        var rnd = BMMath.random()\n        for (i = 0; i < len; i += 1) {\n          arr[i] = min[i] + rnd * (max[i] - min[i])\n        }\n        return arr\n      }\n      if (min === undefined) {\n        min = 0\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      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(\n          points[i][0],\n          points[i][1],\n          outVertexPoint[0] + points[i][0],\n          outVertexPoint[1] + points[i][1],\n          inVertexPoint[0] + points[i][0],\n          inVertexPoint[1] + points[i][1],\n          i,\n          true,\n        )\n      }\n      return path\n    }\n\n    function initiateExpression(elem, data, property) {\n      var val = data.x\n      var needsVelocity = /velocity(?![\\w\\d])/.test(val)\n      var _needsRandom = val.indexOf('random') !== -1\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 () {\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\n      var scoped_bm_rt\n      // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n      var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0] // eslint-disable-line no-eval\n      var numKeys = property.kf ? data.k.length : 0\n\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        while (iWiggle < iterations) {\n          // var rnd = BMMath.random();\n          for (j = 0; j < lenWiggle; j += 1) {\n            addedAmps[j] += -amp + amp * 2 * BMMath.random()\n            // addedAmps[j] += -amp + amp*2*rnd;\n          }\n          iWiggle += 1\n        }\n        // var rnd2 = BMMath.random();\n        var periods = time * freq\n        var perc = periods - Math.floor(periods)\n        var arr = createTypedArray('float32', lenWiggle)\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\n            // 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          return arr\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        if (t > 1) {\n          t = 1\n        } else if (t < 0) {\n          t = 0\n        }\n        var mult = fn(t)\n        if ($bm_isInstanceOfArray(val1)) {\n          var iKey\n          var lenKey = val1.length\n          var arr = createTypedArray('float32', lenKey)\n          for (iKey = 0; iKey < lenKey; iKey += 1) {\n            arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey]\n          }\n          return arr\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        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          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                break\n              }\n            }\n            if (index === -1) {\n              index = iKey + 1\n              keyTime = data.k[iKey].t\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        if (!data.k.length || typeof data.k[0] === 'number') {\n          throw new Error('The property has no keyframe at index ' + ind)\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\n        lenKey = arr.length\n        for (iKey = 0; iKey < lenKey; iKey += 1) {\n          obKey[iKey] = arr[iKey]\n          obKey.value[iKey] = arr[iKey]\n        }\n        return obKey\n      }\n\n      function framesToTime(fr, fps) {\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate\n        }\n        return fr / fps\n      }\n\n      function timeToFrames(t, fps) {\n        if (!t && t !== 0) {\n          t = time\n        }\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate\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          return value.substring(init, end)\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          return value.substr(init, end)\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      function executeExpression(_value) {\n        // globalData.pushExpression();\n        value = _value\n        if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n          return value\n        }\n        if (this.propType === 'textSelector') {\n          textIndex = this.textIndex\n          textTotal = this.textTotal\n          selectorValue = this.selectorValue\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        if (!transform) {\n          transform = elem.layerInterface('ADBE Transform Group')\n          $bm_transform = transform\n          if (transform) {\n            anchorPoint = transform.anchorPoint\n            /* position = transform.position;\n                    rotation = transform.rotation;\n                    scale = transform.scale; */\n          }\n        }\n\n        if (elemType === 4 && !content) {\n          content = thisLayer('ADBE Root Vectors Group')\n        }\n        if (!effect) {\n          effect = thisLayer(4)\n        }\n        hasParent = !!(elem.hierarchy && elem.hierarchy.length)\n        if (hasParent && !parent) {\n          parent = elem.hierarchy[0].layerInterface\n        }\n        time = this.comp.renderedFrame / this.comp.globalData.frameRate\n        if (_needsRandom) {\n          seedRandom(randSeed + time)\n        }\n        if (needsVelocity) {\n          velocity = velocityAtTime(time)\n        }\n        expression_function()\n        this.frameExpressionId = elem.globalData.frameId\n\n        // 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        scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt\n        return scoped_bm_rt\n      }\n      // Bundlers will see these as dead code and unless we reference them\n      executeExpression.__preventDeadCodeRemoval = [\n        $bm_transform,\n        anchorPoint,\n        time,\n        velocity,\n        inPoint,\n        outPoint,\n        width,\n        height,\n        name,\n        loop_in,\n        loop_out,\n        smooth,\n        toComp,\n        fromCompToSurface,\n        toWorld,\n        fromWorld,\n        mask,\n        position,\n        rotation,\n        scale,\n        thisComp,\n        numKeys,\n        active,\n        wiggle,\n        loopInDuration,\n        loopOutDuration,\n        comp,\n        lookAt,\n        easeOut,\n        easeIn,\n        ease,\n        nearestKey,\n        key,\n        text,\n        textIndex,\n        textTotal,\n        selectorValue,\n        framesToTime,\n        timeToFrames,\n        sourceRectAtTime,\n        substring,\n        substr,\n        posterizeTime,\n        index,\n        globalData,\n      ]\n      return executeExpression\n    }\n\n    ob.initiateExpression = initiateExpression\n    ob.__preventDeadCodeRemoval = [\n      window,\n      document,\n      XMLHttpRequest,\n      fetch,\n      frames,\n      $bm_neg,\n      add,\n      $bm_sum,\n      $bm_sub,\n      $bm_mul,\n      $bm_div,\n      $bm_mod,\n      clamp,\n      radians_to_degrees,\n      degreesToRadians,\n      degrees_to_radians,\n      normalize,\n      rgbToHsl,\n      hslToRgb,\n      linear,\n      random,\n      createPath,\n    ]\n    return ob\n  })()\n\n  const 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      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      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      if (v1.length) {\n        var i\n        for (i = 0; i < v1.length; i += 1) {\n          speed += Math.pow(v2[i] - v1[i], 2)\n        }\n        speed = Math.sqrt(speed) * 100\n      } else {\n        speed = 0\n      }\n      return speed\n    }\n\n    function getVelocityAtTime(frameNum) {\n      if (this.vel !== undefined) {\n        return this.vel\n      }\n      var delta = -0.001\n      // frameNum += this.elem.data.st;\n      var v1 = this.getValueAtTime(frameNum)\n      var v2 = this.getValueAtTime(frameNum + delta)\n      var velocity\n      if (v1.length) {\n        velocity = createTypedArray('float32', v1.length)\n        var i\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      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      type = type ? type.toLowerCase() : ''\n      var currentFrame = this.comp.renderedFrame\n      var keyframes = this.keyframes\n      var lastKeyFrame = keyframes[keyframes.length - 1].t\n      if (currentFrame <= lastKeyFrame) {\n        return this.pv\n      }\n      var cycleDuration\n      var firstKeyFrame\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1\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        firstKeyFrame = lastKeyFrame - cycleDuration\n      }\n      var i\n      var len\n      var ret\n      if (type === 'pingpong') {\n        var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration)\n        if (iterations % 2 !== 0) {\n          return this.getValueAtTime(\n            (cycleDuration - ((currentFrame - firstKeyFrame) % cycleDuration) + firstKeyFrame) /\n              this.comp.globalData.frameRate,\n            0,\n          ) // 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(\n          (((currentFrame - firstKeyFrame) % cycleDuration) + firstKeyFrame) / this.comp.globalData.frameRate,\n          0,\n        ) // eslint-disable-line\n        var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration)\n        if (this.pv.length) {\n          ret = new Array(initV.length)\n          len = ret.length\n          for (i = 0; i < len; i += 1) {\n            ret[i] = (endV[i] - initV[i]) * repeats + current[i]\n          }\n          return ret\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        if (this.pv.length) {\n          ret = new Array(lastValue.length)\n          len = ret.length\n          for (i = 0; i < len; i += 1) {\n            ret[i] =\n              lastValue[i] +\n              ((lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate)) /\n                0.0005 // eslint-disable-line\n          }\n          return ret\n        }\n        return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001)\n      }\n      return this.getValueAtTime(\n        (((currentFrame - firstKeyFrame) % cycleDuration) + firstKeyFrame) / this.comp.globalData.frameRate,\n        0,\n      ) // eslint-disable-line\n    }\n\n    function loopIn(type, duration, durationFlag) {\n      if (!this.k) {\n        return this.pv\n      }\n      type = type ? type.toLowerCase() : ''\n      var currentFrame = this.comp.renderedFrame\n      var keyframes = this.keyframes\n      var firstKeyFrame = keyframes[0].t\n      if (currentFrame >= firstKeyFrame) {\n        return this.pv\n      }\n      var cycleDuration\n      var lastKeyFrame\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1\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        lastKeyFrame = firstKeyFrame + cycleDuration\n      }\n      var i\n      var len\n      var ret\n      if (type === 'pingpong') {\n        var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration)\n        if (iterations % 2 === 0) {\n          return this.getValueAtTime(\n            (((firstKeyFrame - currentFrame) % cycleDuration) + firstKeyFrame) / this.comp.globalData.frameRate,\n            0,\n          ) // 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(\n          (cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration) + firstKeyFrame) /\n            this.comp.globalData.frameRate,\n          0,\n        )\n        var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1\n        if (this.pv.length) {\n          ret = new Array(initV.length)\n          len = ret.length\n          for (i = 0; i < len; i += 1) {\n            ret[i] = current[i] - (endV[i] - initV[i]) * repeats\n          }\n          return ret\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        if (this.pv.length) {\n          ret = new Array(firstValue.length)\n          len = ret.length\n          for (i = 0; i < len; i += 1) {\n            ret[i] = firstValue[i] + ((firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame)) / 0.001\n          }\n          return ret\n        }\n        return firstValue + ((firstValue - nextFirstValue) * (firstKeyFrame - currentFrame)) / 0.001\n      }\n      return this.getValueAtTime(\n        (cycleDuration - (((firstKeyFrame - currentFrame) % cycleDuration) + firstKeyFrame)) /\n          this.comp.globalData.frameRate,\n        0,\n      ) // eslint-disable-line\n    }\n\n    function smooth(width, samples) {\n      if (!this.k) {\n        return this.pv\n      }\n      width = (width || 0.4) * 0.5\n      samples = Math.floor(samples || 5)\n      if (samples <= 1) {\n        return this.pv\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      if (this.pv.length) {\n        value = createTypedArray('float32', this.pv.length)\n      } else {\n        value = 0\n      }\n      var sampleValue\n      while (i < samples) {\n        sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency)\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        i += 1\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      return value\n    }\n\n    function getTransformValueAtTime(time) {\n      if (!this._transformCachingAtTime) {\n        this._transformCachingAtTime = {\n          v: new Matrix(),\n        }\n      }\n      /// /\n      var matrix = this._transformCachingAtTime.v\n      matrix.cloneFromProps(this.pre.props)\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      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      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      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\n          .rotateZ(-rotationZ * this.rz.mult)\n          .rotateY(rotationY * this.ry.mult)\n          .rotateX(rotationX * this.rx.mult)\n          .rotateZ(-orientation[2] * this.or.mult)\n          .rotateY(orientation[1] * this.or.mult)\n          .rotateX(orientation[0] * this.or.mult)\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        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      return matrix\n      /// /\n    }\n\n    function getTransformStaticValueAtTime() {\n      return this.v.clone(new Matrix())\n    }\n\n    var getTransformProperty = TransformPropertyFactory.getTransformProperty\n    TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n      var prop = getTransformProperty(elem, data, container)\n      if (prop.dynamicProperties.length) {\n        prop.getValueAtTime = getTransformValueAtTime.bind(prop)\n      } else {\n        prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop)\n      }\n      prop.setGroupProperty = expressionHelpers.setGroupProperty\n      return prop\n    }\n\n    var propertyGetProp = PropertyFactory.getProp\n    PropertyFactory.getProp = function (elem, data, type, mult, container) {\n      var prop = propertyGetProp(elem, data, type, mult, container)\n      // prop.getVelocityAtTime = getVelocityAtTime;\n      // prop.loopOut = loopOut;\n      // prop.loopIn = loopIn;\n      if (prop.kf) {\n        prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop)\n      } else {\n        prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop)\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      if (type !== 0) {\n        value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length)\n      }\n      prop._cachingAtTime = {\n        lastFrame: initialDefaultFrame,\n        lastIndex: 0,\n        value: value,\n      }\n      expressionHelpers.searchExpressions(elem, data, prop)\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      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      return this._cachingAtTime.shapeValue\n    }\n\n    var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction()\n    var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction()\n\n    function ShapeExpressions() {}\n    ShapeExpressions.prototype = {\n      vertices: function (prop, time) {\n        if (this.k) {\n          this.getValue()\n        }\n        var shapePath = this.v\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0)\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        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        return arr\n      },\n      points: function (time) {\n        return this.vertices('v', time)\n      },\n      inTangents: function (time) {\n        return this.vertices('i', time)\n      },\n      outTangents: function (time) {\n        return this.vertices('o', time)\n      },\n      isClosed: function () {\n        return this.v.c\n      },\n      pointOnPath: function (perc, time) {\n        var shapePath = this.v\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0)\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        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(\n              shapePath.v[initIndex],\n              shapePath.v[endIndex],\n              shapePath.o[initIndex],\n              shapePath.i[endIndex],\n              segmentPerc,\n              lengths[i],\n            )\n            break\n          } else {\n            accumulatedLength += lengths[i].addedLength\n          }\n          i += 1\n        }\n        if (!pt) {\n          pt = shapePath.c\n            ? [shapePath.v[0][0], shapePath.v[0][1]]\n            : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]]\n        }\n        return pt\n      },\n      vectorOnPath: function (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        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        if (magnitude === 0) {\n          return [0, 0]\n        }\n        var unitVector =\n          vectorType === 'tangent'\n            ? [xLength / magnitude, yLength / magnitude]\n            : [-yLength / magnitude, xLength / magnitude]\n        return unitVector\n      },\n      tangentOnPath: function (perc, time) {\n        return this.vectorOnPath(perc, time, 'tangent')\n      },\n      normalOnPath: function (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\n    var propertyGetShapeProp = ShapePropertyFactory.getShapeProp\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      if (type === 3) {\n        expressionHelpers.searchExpressions(elem, data.pt, prop)\n      } else if (type === 4) {\n        expressionHelpers.searchExpressions(elem, data.ks, prop)\n      }\n      if (prop.k) {\n        elem.addDynamicProperty(prop)\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      return null\n    }\n\n    TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n      var newValue = this.calculateExpression(text)\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      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  // Registering expression plugin\n  setExpressionsPlugin(Expressions)\n  initialize$1()\n  initialize()\n\n  return lottie\n})()\n\nexport { lottie as default }\n"],"names":["value","val","data","comp","loadAnimation","ob","name","key","expressionsPlugin","index","searchAnimations","div","length","time","elem","scale","transform","width","text","sum","mask","property","toWorld","fromWorld","fromComp","i","len","content","globalData","position","prng","seed","t","j","s","BMMath","wiggle","velocity","loopOut","loopIn","smooth","rotation"],"mappings":"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"}