@lottiefiles/lottie-player 2.0.1 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lottie-player.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/@lit/reactive-element/decorators/base.js","../node_modules/@lit/reactive-element/decorators/event-options.js","../node_modules/@lit/reactive-element/decorators/query.js","../node_modules/@lit/reactive-element/decorators/query-all.js","../node_modules/@lit/reactive-element/decorators/query-async.js","../node_modules/@lit/reactive-element/decorators/query-assigned-elements.js","../node_modules/@lit/reactive-element/decorators/query-assigned-nodes.js","../node_modules/lottie-web/build/player/lottie.js","../src/lottie-player.styles.ts","../src/versions.ts","../src/lottie-player.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,e=Symbol(),n=new Map;class s{constructor(t,n){if(this._$cssResult$=!0,n!==e)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t}get styleSheet(){let e=n.get(this.cssText);return t&&void 0===e&&(n.set(this.cssText,e=new CSSStyleSheet),e.replaceSync(this.cssText)),e}toString(){return this.cssText}}const o=t=>new s(\"string\"==typeof t?t:t+\"\",e),r=(t,...n)=>{const o=1===t.length?t[0]:n.reduce(((e,n,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(n)+t[s+1]),t[0]);return new s(o,e)},i=(e,n)=>{t?e.adoptedStyleSheets=n.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):n.forEach((t=>{const n=document.createElement(\"style\"),s=window.litNonce;void 0!==s&&n.setAttribute(\"nonce\",s),n.textContent=t.cssText,e.appendChild(n)}))},S=t?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const n of t.cssRules)e+=n.cssText;return o(e)})(t):t;export{s as CSSResult,i as adoptStyles,r as css,S as getCompatibleStyle,t as supportsAdoptingStyleSheets,o as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as i}from\"./css-tag.js\";export{CSSResult,adoptStyles,css,getCompatibleStyle,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var s;const e=window.trustedTypes,r=e?e.emptyScript:\"\",h=window.reactiveElementPolyfillSupport,o={toAttribute(t,i){switch(i){case Boolean:t=t?r:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t)}catch(t){s=null}}return s}},n=(t,i)=>i!==t&&(i==i||t==t),l={attribute:!0,type:String,converter:o,reflect:!1,hasChanged:n};class a extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(t){var i;null!==(i=this.l)&&void 0!==i||(this.l=[]),this.l.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this._$Eh(s,i);void 0!==e&&(this._$Eu.set(e,s),t.push(e))})),t}static createProperty(t,i=l){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s=\"symbol\"==typeof t?Symbol():\"__\"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e)}}static getPropertyDescriptor(t,i,s){return{get(){return this[i]},set(e){const r=this[t];this[i]=e,this.requestUpdate(t,r,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||l}static finalize(){if(this.hasOwnProperty(\"finalized\"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Eu=new Map,this.hasOwnProperty(\"properties\")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(i){const s=[];if(Array.isArray(i)){const e=new Set(i.flat(1/0).reverse());for(const i of e)s.unshift(t(i))}else void 0!==i&&s.push(t(i));return s}static _$Eh(t,i){const s=i.attribute;return!1===s?void 0:\"string\"==typeof s?s:\"string\"==typeof t?t.toLowerCase():void 0}o(){var t;this._$Ep=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(t=this.constructor.l)||void 0===t||t.forEach((t=>t(this)))}addController(t){var i,s;(null!==(i=this._$Eg)&&void 0!==i?i:this._$Eg=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t))}removeController(t){var i;null===(i=this._$Eg)||void 0===i||i.splice(this._$Eg.indexOf(t)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this._$Et.set(i,this[i]),delete this[i])}))}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return i(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)}))}attributeChangedCallback(t,i,s){this._$AK(t,s)}_$ES(t,i,s=l){var e,r;const h=this.constructor._$Eh(t,s);if(void 0!==h&&!0===s.reflect){const n=(null!==(r=null===(e=s.converter)||void 0===e?void 0:e.toAttribute)&&void 0!==r?r:o.toAttribute)(i,s.type);this._$Ei=t,null==n?this.removeAttribute(h):this.setAttribute(h,n),this._$Ei=null}}_$AK(t,i){var s,e,r;const h=this.constructor,n=h._$Eu.get(t);if(void 0!==n&&this._$Ei!==n){const t=h.getPropertyOptions(n),l=t.converter,a=null!==(r=null!==(e=null===(s=l)||void 0===s?void 0:s.fromAttribute)&&void 0!==e?e:\"function\"==typeof l?l:null)&&void 0!==r?r:o.fromAttribute;this._$Ei=n,this[n]=a(i,t.type),this._$Ei=null}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||n)(this[t],i)?(this._$AL.has(t)||this._$AL.set(t,i),!0===s.reflect&&this._$Ei!==t&&(void 0===this._$E_&&(this._$E_=new Map),this._$E_.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this._$Ep=this._$EC())}async _$EC(){this.isUpdatePending=!0;try{await this._$Ep}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((t,i)=>this[i]=t)),this._$Et=void 0);let i=!1;const s=this._$AL;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this._$EU()}catch(t){throw i=!1,this._$EU(),t}i&&this._$AE(s)}willUpdate(t){}_$AE(t){var i;null===(i=this._$Eg)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(t){return!0}update(t){void 0!==this._$E_&&(this._$E_.forEach(((t,i)=>this._$ES(i,this[i],t))),this._$E_=void 0),this._$EU()}updated(t){}firstUpdated(t){}}a.finalized=!0,a.elementProperties=new Map,a.elementStyles=[],a.shadowRootOptions={mode:\"open\"},null==h||h({ReactiveElement:a}),(null!==(s=globalThis.reactiveElementVersions)&&void 0!==s?s:globalThis.reactiveElementVersions=[]).push(\"1.2.1\");export{a as ReactiveElement,o as defaultConverter,n as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nvar t;const i=globalThis.trustedTypes,s=i?i.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,e=`lit$${(Math.random()+\"\").slice(9)}$`,o=\"?\"+e,n=`<${o}>`,l=document,h=(t=\"\")=>l.createComment(t),r=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,d=Array.isArray,u=t=>{var i;return d(t)||\"function\"==typeof(null===(i=t)||void 0===i?void 0:i[Symbol.iterator])},c=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,v=/-->/g,a=/>/g,f=/>|[ \t\\n\f\\r](?:([^\\s\"'>=/]+)([ \t\\n\f\\r]*=[ \t\\n\f\\r]*(?:[^ \t\\n\f\\r\"'`<>=]|(\"|')|))|$)/g,_=/'/g,m=/\"/g,g=/^(?:script|style|textarea)$/i,p=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),$=p(1),y=p(2),b=Symbol.for(\"lit-noChange\"),w=Symbol.for(\"lit-nothing\"),T=new WeakMap,x=(t,i,s)=>{var e,o;const n=null!==(e=null==s?void 0:s.renderBefore)&&void 0!==e?e:i;let l=n._$litPart$;if(void 0===l){const t=null!==(o=null==s?void 0:s.renderBefore)&&void 0!==o?o:null;n._$litPart$=l=new N(i.insertBefore(h(),t),t,void 0,null!=s?s:{})}return l._$AI(t),l},A=l.createTreeWalker(l,129,null,!1),C=(t,i)=>{const o=t.length-1,l=[];let h,r=2===i?\"<svg>\":\"\",d=c;for(let i=0;i<o;i++){const s=t[i];let o,u,p=-1,$=0;for(;$<s.length&&(d.lastIndex=$,u=d.exec(s),null!==u);)$=d.lastIndex,d===c?\"!--\"===u[1]?d=v:void 0!==u[1]?d=a:void 0!==u[2]?(g.test(u[2])&&(h=RegExp(\"</\"+u[2],\"g\")),d=f):void 0!==u[3]&&(d=f):d===f?\">\"===u[0]?(d=null!=h?h:c,p=-1):void 0===u[1]?p=-2:(p=d.lastIndex-u[2].length,o=u[1],d=void 0===u[3]?f:'\"'===u[3]?m:_):d===m||d===_?d=f:d===v||d===a?d=c:(d=f,h=void 0);const y=d===f&&t[i+1].startsWith(\"/>\")?\" \":\"\";r+=d===c?s+n:p>=0?(l.push(o),s.slice(0,p)+\"$lit$\"+s.slice(p)+e+y):s+e+(-2===p?(l.push(void 0),i):y)}const u=r+(t[o]||\"<?>\")+(2===i?\"</svg>\":\"\");if(!Array.isArray(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return[void 0!==s?s.createHTML(u):u,l]};class E{constructor({strings:t,_$litType$:s},n){let l;this.parts=[];let r=0,d=0;const u=t.length-1,c=this.parts,[v,a]=C(t,s);if(this.el=E.createElement(v,n),A.currentNode=this.el.content,2===s){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes)}for(;null!==(l=A.nextNode())&&c.length<u;){if(1===l.nodeType){if(l.hasAttributes()){const t=[];for(const i of l.getAttributeNames())if(i.endsWith(\"$lit$\")||i.startsWith(e)){const s=a[d++];if(t.push(i),void 0!==s){const t=l.getAttribute(s.toLowerCase()+\"$lit$\").split(e),i=/([.?@])?(.*)/.exec(s);c.push({type:1,index:r,name:i[2],strings:t,ctor:\".\"===i[1]?M:\"?\"===i[1]?H:\"@\"===i[1]?I:S})}else c.push({type:6,index:r})}for(const i of t)l.removeAttribute(i)}if(g.test(l.tagName)){const t=l.textContent.split(e),s=t.length-1;if(s>0){l.textContent=i?i.emptyScript:\"\";for(let i=0;i<s;i++)l.append(t[i],h()),A.nextNode(),c.push({type:2,index:++r});l.append(t[s],h())}}}else if(8===l.nodeType)if(l.data===o)c.push({type:2,index:r});else{let t=-1;for(;-1!==(t=l.data.indexOf(e,t+1));)c.push({type:7,index:r}),t+=e.length-1}r++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function P(t,i,s=t,e){var o,n,l,h;if(i===b)return i;let d=void 0!==e?null===(o=s._$Cl)||void 0===o?void 0:o[e]:s._$Cu;const u=r(i)?void 0:i._$litDirective$;return(null==d?void 0:d.constructor)!==u&&(null===(n=null==d?void 0:d._$AO)||void 0===n||n.call(d,!1),void 0===u?d=void 0:(d=new u(t),d._$AT(t,s,e)),void 0!==e?(null!==(l=(h=s)._$Cl)&&void 0!==l?l:h._$Cl=[])[e]=d:s._$Cu=d),void 0!==d&&(i=P(t,d._$AS(t,i.values),d,e)),i}class V{constructor(t,i){this.v=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(t){var i;const{el:{content:s},parts:e}=this._$AD,o=(null!==(i=null==t?void 0:t.creationScope)&&void 0!==i?i:l).importNode(s,!0);A.currentNode=o;let n=A.nextNode(),h=0,r=0,d=e[0];for(;void 0!==d;){if(h===d.index){let i;2===d.type?i=new N(n,n.nextSibling,this,t):1===d.type?i=new d.ctor(n,d.name,d.strings,this,t):6===d.type&&(i=new L(n,this,t)),this.v.push(i),d=e[++r]}h!==(null==d?void 0:d.index)&&(n=A.nextNode(),h++)}return o}m(t){let i=0;for(const s of this.v)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class N{constructor(t,i,s,e){var o;this.type=2,this._$AH=w,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cg=null===(o=null==e?void 0:e.isConnected)||void 0===o||o}get _$AU(){var t,i;return null!==(i=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==i?i:this._$Cg}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=P(this,t,i),r(t)?t===w||null==t||\"\"===t?(this._$AH!==w&&this._$AR(),this._$AH=w):t!==this._$AH&&t!==b&&this.$(t):void 0!==t._$litType$?this.T(t):void 0!==t.nodeType?this.S(t):u(t)?this.A(t):this.$(t)}M(t,i=this._$AB){return this._$AA.parentNode.insertBefore(t,i)}S(t){this._$AH!==t&&(this._$AR(),this._$AH=this.M(t))}$(t){this._$AH!==w&&r(this._$AH)?this._$AA.nextSibling.data=t:this.S(l.createTextNode(t)),this._$AH=t}T(t){var i;const{values:s,_$litType$:e}=t,o=\"number\"==typeof e?this._$AC(t):(void 0===e.el&&(e.el=E.createElement(e.h,this.options)),e);if((null===(i=this._$AH)||void 0===i?void 0:i._$AD)===o)this._$AH.m(s);else{const t=new V(o,this),i=t.p(this.options);t.m(s),this.S(i),this._$AH=t}}_$AC(t){let i=T.get(t.strings);return void 0===i&&T.set(t.strings,i=new E(t)),i}A(t){d(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const o of t)e===i.length?i.push(s=new N(this.M(h()),this.M(h()),this,this.options)):s=i[e],s._$AI(o),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,i){var s;for(null===(s=this._$AP)||void 0===s||s.call(this,!1,!0,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){var i;void 0===this._$AM&&(this._$Cg=t,null===(i=this._$AP)||void 0===i||i.call(this,t))}}class S{constructor(t,i,s,e,o){this.type=1,this._$AH=w,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=o,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=w}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=!1;if(void 0===o)t=P(this,t,i,0),n=!r(t)||t!==this._$AH&&t!==b,n&&(this._$AH=t);else{const e=t;let l,h;for(t=o[0],l=0;l<o.length-1;l++)h=P(this,e[s+l],i,l),h===b&&(h=this._$AH[l]),n||(n=!r(h)||h!==this._$AH[l]),h===w?t=w:t!==w&&(t+=(null!=h?h:\"\")+o[l+1]),this._$AH[l]=h}n&&!e&&this.k(t)}k(t){t===w?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:\"\")}}class M extends S{constructor(){super(...arguments),this.type=3}k(t){this.element[this.name]=t===w?void 0:t}}const k=i?i.emptyScript:\"\";class H extends S{constructor(){super(...arguments),this.type=4}k(t){t&&t!==w?this.element.setAttribute(this.name,k):this.element.removeAttribute(this.name)}}class I extends S{constructor(t,i,s,e,o){super(t,i,s,e,o),this.type=5}_$AI(t,i=this){var s;if((t=null!==(s=P(this,t,i,0))&&void 0!==s?s:w)===b)return;const e=this._$AH,o=t===w&&e!==w||t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive,n=t!==w&&(e===w||o);o&&this.element.removeEventListener(this.name,this,e),n&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){var i,s;\"function\"==typeof this._$AH?this._$AH.call(null!==(s=null===(i=this.options)||void 0===i?void 0:i.host)&&void 0!==s?s:this.element,t):this._$AH.handleEvent(t)}}class L{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){P(this,t)}}const R={P:\"$lit$\",V:e,L:o,I:1,N:C,R:V,D:u,j:P,H:N,O:S,F:H,B:I,W:M,Z:L},z=window.litHtmlPolyfillSupport;null==z||z(E,N),(null!==(t=globalThis.litHtmlVersions)&&void 0!==t?t:globalThis.litHtmlVersions=[]).push(\"2.1.2\");export{R as _$LH,$ as html,b as noChange,w as nothing,x as render,y as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as i}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var l,o;const r=t;class s extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Dt=e(i,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!1)}render(){return i}}s.finalized=!0,s._$litElement$=!0,null===(l=globalThis.litElementHydrateSupport)||void 0===l||l.call(globalThis,{LitElement:s});const n=globalThis.litElementPolyfillSupport;null==n||n({LitElement:s});const h={_$AK:(t,e,i)=>{t._$AK(e,i)},_$AL:t=>t._$AL};(null!==(o=globalThis.litElementVersions)&&void 0!==o?o:globalThis.litElementVersions=[]).push(\"3.1.2\");export{s as LitElement,r as UpdatingElement,h as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst n=n=>e=>\"function\"==typeof e?((n,e)=>(window.customElements.define(n,e),e))(n,e):((n,e)=>{const{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(e){window.customElements.define(n,e)}}})(n,e);export{n as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst i=(i,e)=>\"method\"===e.kind&&e.descriptor&&!(\"value\"in e.descriptor)?{...e,finisher(n){n.createProperty(e.key,i)}}:{kind:\"field\",key:Symbol(),placement:\"own\",descriptor:{},originalKey:e.key,initializer(){\"function\"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(n){n.createProperty(e.key,i)}};function e(e){return(n,t)=>void 0!==t?((i,e,n)=>{e.constructor.createProperty(n,i)})(e,n,t):i(e,n)}export{e as property};\n//# sourceMappingURL=property.js.map\n","import{property as r}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function t(t){return r({...t,state:!0})}export{t as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,o)=>{Object.defineProperty(t,o,e)},t=(e,t)=>({kind:\"method\",placement:\"prototype\",key:t.key,descriptor:e}),o=({finisher:e,descriptor:t})=>(o,n)=>{var r;if(void 0===n){const n=null!==(r=o.originalKey)&&void 0!==r?r:o.key,i=null!=t?{kind:\"method\",placement:\"prototype\",key:n,descriptor:t(o.key)}:{...o,key:n};return null!=e&&(i.finisher=function(t){e(t,n)}),i}{const r=o.constructor;void 0!==t&&Object.defineProperty(o,n,t(n)),null==e||e(r,n)}};export{o as decorateProperty,e as legacyPrototypeMethod,t as standardPrototypeMethod};\n//# sourceMappingURL=base.js.map\n","import{decorateProperty as r}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e){return r({finisher:(r,t)=>{Object.assign(r.prototype[t],e)}})}export{e as eventOptions};\n//# sourceMappingURL=event-options.js.map\n","import{decorateProperty as o}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function i(i,n){return o({descriptor:o=>{const t={get(){var o,n;return null!==(n=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(i))&&void 0!==n?n:null},enumerable:!0,configurable:!0};if(n){const n=\"symbol\"==typeof o?Symbol():\"__\"+o;t.get=function(){var o,t;return void 0===this[n]&&(this[n]=null!==(t=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(i))&&void 0!==t?t:null),this[n]}}return t}})}export{i as query};\n//# sourceMappingURL=query.js.map\n","import{decorateProperty as r}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e){return r({descriptor:r=>({get(){var r,o;return null!==(o=null===(r=this.renderRoot)||void 0===r?void 0:r.querySelectorAll(e))&&void 0!==o?o:[]},enumerable:!0,configurable:!0})})}export{e as queryAll};\n//# sourceMappingURL=query-all.js.map\n","import{decorateProperty as r}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction e(e){return r({descriptor:r=>({async get(){var r;return await this.updateComplete,null===(r=this.renderRoot)||void 0===r?void 0:r.querySelector(e)},enumerable:!0,configurable:!0})})}export{e as queryAsync};\n//# sourceMappingURL=query-async.js.map\n","import{decorateProperty as o}from\"./base.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var n;const e=null!=(null===(n=window.HTMLSlotElement)||void 0===n?void 0:n.prototype.assignedElements)?(o,n)=>o.assignedElements(n):(o,n)=>o.assignedNodes(n).filter((o=>o.nodeType===Node.ELEMENT_NODE));function l(n){const{slot:l,selector:t}=null!=n?n:{};return o({descriptor:o=>({get(){var o;const r=\"slot\"+(l?`[name=${l}]`:\":not([name])\"),i=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(r),s=null!=i?e(i,n):[];return t?s.filter((o=>o.matches(t))):s},enumerable:!0,configurable:!0})})}export{l as queryAssignedElements};\n//# sourceMappingURL=query-assigned-elements.js.map\n","import{decorateProperty as e}from\"./base.js\";import{queryAssignedElements as t}from\"./query-assigned-elements.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function o(o,n,r){let l,s=o;return\"object\"==typeof o?(s=o.slot,l=o):l={flatten:n},r?t({slot:s,flatten:n,selector:r}):e({descriptor:e=>({get(){var e,t;const o=\"slot\"+(s?`[name=${s}]`:\":not([name])\"),n=null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(o);return null!==(t=null==n?void 0:n.assignedNodes(l))&&void 0!==t?t:[]},enumerable:!0,configurable:!0})})}export{o as queryAssignedNodes};\n//# sourceMappingURL=query-assigned-nodes.js.map\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n var svgNS = 'http://www.w3.org/2000/svg';\n var locationHref = '';\n var _useWebWorker = false;\n var initialDefaultFrame = -999999;\n\n var setWebWorker = function setWebWorker(flag) {\n _useWebWorker = !!flag;\n };\n\n var getWebWorker = function getWebWorker() {\n return _useWebWorker;\n };\n\n var setLocationHref = function setLocationHref(value) {\n locationHref = value;\n };\n\n var getLocationHref = function getLocationHref() {\n return locationHref;\n };\n\n function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n // import Howl from '../../3rd_party/howler';\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n }\n\n if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\n });\n }\n\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n\n this._updateVolume();\n },\n getVolume: function getVolume() {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n\n default:\n value = 1.1;\n break;\n }\n\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n\n return arr;\n }\n\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n\n if (type === 'int16') {\n return new Int16Array(len);\n }\n\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n\n return createRegularArray(type, len);\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n\n return createRegularArray;\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n var subframeEnabled = true;\n var expressionsPlugin = null;\n var expressionsInterfaces = null;\n var idPrefix$1 = '';\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var _shouldRoundValues = false;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n\n (function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface$1() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n\n return value;\n }\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\n\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n\n default:\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n\n default:\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n\n var setExpressionInterfaces = function setExpressionInterfaces(value) {\n expressionsInterfaces = value;\n };\n\n var getExpressionInterfaces = function getExpressionInterfaces() {\n return expressionsInterfaces;\n };\n\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\n };\n\n var getIdPrefix = function getIdPrefix() {\n return idPrefix$1;\n };\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n\n return JSON.parse(JSON.stringify(comp.layers));\n }\n\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n\n return null;\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n }\n };\n\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: 'no'\n });\n charData.data.shapes[0].it.push({\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n },\n sk: {\n k: 0,\n a: 0\n },\n sa: {\n k: 0,\n a: 0\n },\n ty: 'tr'\n });\n }\n }\n }\n }\n };\n }();\n\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n\n try {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), path, true);\n } catch (error) {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n }\n\n xhr.send();\n }\n\n return {\n load: loadAsset\n };\n }();\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n\n _workerSelf.dataManager.completeData(animation);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n\n if (box.width || _count > 500) {\n this._imageLoaded();\n\n clearInterval(intervalId);\n }\n\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n\n if (keysCount === 0) {\n throw new Error();\n }\n\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n\n markers.push(markerData);\n }\n\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n\n function getRenderer(key) {\n return renderers[key];\n }\n\n function getRegisteredRenderer() {\n // Returns canvas by default for compatibility\n if (renderers.canvas) {\n return 'canvas';\n } // Returns any renderer that is registered\n\n\n for (var key in renderers) {\n if (renderers[key]) {\n return key;\n }\n }\n\n return '';\n }\n\n function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n this.expressionsPlugin = getExpressionsPlugin();\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = 'svg';\n\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n\n var RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (_typeof$4(animationData) !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== 'false';\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n if (!params.path) {\n this.trigger('destroy');\n } else {\n this.setParams(params);\n }\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function (width, height) {\n // Adding this validation for backwards compatibility in case an event object was being passed down\n var _width = typeof width === 'number' ? width : undefined;\n\n var _height = typeof height === 'number' ? height : undefined;\n\n this.renderer.updateContainerSize(_width, _height);\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n\n try {\n if (this.expressionsPlugin) {\n this.expressionsPlugin.resetFrame();\n }\n\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_play');\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_pause');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n\n return null;\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.expressionsPlugin = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setLoop = function (isLooping) {\n this.loop = isLooping;\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {// TODO: decide how to handle catch case\n }\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize; // moduleOb.start = start;\n\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n /* eslint-disable */\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n var pooling = function () {\n function _double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n \"double\": _double\n };\n }();\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n }();\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments())\n };\n }\n\n return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n\n flag = false;\n }\n }\n\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0t0 = t0 * t0 * t0; //\n\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0t1 = t0 * t0 * t1; //\n\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1t1 = t0 * t1 * t1; //\n\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyframeMetadata.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n var PropertyFactory = function () {\n function getProp(elem, data, type, mult, container) {\n if (data.sid) {\n data = elem.globalData.slotManager.getProp(data);\n }\n\n var p;\n\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n\n default:\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\n\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return poolFactory(8, create);\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n\n default:\n arr = [];\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n\n return newPath;\n };\n\n ShapePath.prototype.length = function () {\n return this._length;\n };\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n var shapeCollectionPool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching); /// /\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i;\n var len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue;\n\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n\n var i;\n var len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2; // }\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function multiply(matrix) {\n var matrixProps = matrix.props;\n return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.multiply = multiply;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\n function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n function setLocation(href) {\n setLocationHref(href);\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n\n case 'matrix':\n return Matrix;\n\n default:\n return null;\n }\n }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocation;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize; // lottie.start = start;\n\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.useWebWorker = setWebWorker;\n lottie.setIDPrefix = setPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.12.2';\n\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n\n return null;\n }\n\n var queryString = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n try {\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n } catch (err) {//\n }\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return clonedPath;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n this.appliedTransformations = 0;\n this.pre.reset();\n\n if (!this.a.effectsSequence.length) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {//\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n\n while (pos > 0) {\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 1,\n ix: 6,\n k: [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n s: {\n a: 0,\n ix: 3,\n k: [100, 100]\n },\n sa: {\n a: 0,\n ix: 5,\n k: 0\n },\n sk: {\n a: 0,\n ix: 4,\n k: 0\n },\n ty: 'tr'\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n\n cont += 1;\n }\n\n this._currentCopies = copies; /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n\n return hasReloaded;\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return clonedPath;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function floatEqual(a, b) {\n return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n }\n\n function floatZero(f) {\n return Math.abs(f) <= 0.00001;\n }\n\n function lerp(p0, p1, amount) {\n return p0 * (1 - amount) + p1 * amount;\n }\n\n function lerpPoint(p0, p1, amount) {\n return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n }\n\n function quadRoots(a, b, c) {\n // no root\n if (a === 0) return [];\n var s = b * b - 4 * a * c; // Complex roots\n\n if (s < 0) return [];\n var singleRoot = -b / (2 * a); // 1 root\n\n if (s === 0) return [singleRoot];\n var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n return [singleRoot - delta, singleRoot + delta];\n }\n\n function polynomialCoefficients(p0, p1, p2, p3) {\n return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n }\n\n function singlePoint(p) {\n return new PolynomialBezier(p, p, p, p, false);\n }\n\n function PolynomialBezier(p0, p1, p2, p3, linearize) {\n if (linearize && pointEqual(p0, p1)) {\n p1 = lerpPoint(p0, p3, 1 / 3);\n }\n\n if (linearize && pointEqual(p2, p3)) {\n p2 = lerpPoint(p0, p3, 2 / 3);\n }\n\n var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n this.a = [coeffx[0], coeffy[0]];\n this.b = [coeffx[1], coeffy[1]];\n this.c = [coeffx[2], coeffy[2]];\n this.d = [coeffx[3], coeffy[3]];\n this.points = [p0, p1, p2, p3];\n }\n\n PolynomialBezier.prototype.point = function (t) {\n return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n };\n\n PolynomialBezier.prototype.derivative = function (t) {\n return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n };\n\n PolynomialBezier.prototype.tangentAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[1], p[0]);\n };\n\n PolynomialBezier.prototype.normalAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[0], p[1]);\n };\n\n PolynomialBezier.prototype.inflectionPoints = function () {\n var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n if (floatZero(denom)) return [];\n var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n if (square < 0) return [];\n var root = Math.sqrt(square);\n\n if (floatZero(root)) {\n if (root > 0 && root < 1) return [tcusp];\n return [];\n }\n\n return [tcusp - root, tcusp + root].filter(function (r) {\n return r > 0 && r < 1;\n });\n };\n\n PolynomialBezier.prototype.split = function (t) {\n if (t <= 0) return [singlePoint(this.points[0]), this];\n if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n var p10 = lerpPoint(this.points[0], this.points[1], t);\n var p11 = lerpPoint(this.points[1], this.points[2], t);\n var p12 = lerpPoint(this.points[2], this.points[3], t);\n var p20 = lerpPoint(p10, p11, t);\n var p21 = lerpPoint(p11, p12, t);\n var p3 = lerpPoint(p20, p21, t);\n return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n };\n\n function extrema(bez, comp) {\n var min = bez.points[0][comp];\n var max = bez.points[bez.points.length - 1][comp];\n\n if (min > max) {\n var e = max;\n max = min;\n min = e;\n } // Derivative roots to find min/max\n\n\n var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n for (var i = 0; i < f.length; i += 1) {\n if (f[i] > 0 && f[i] < 1) {\n var val = bez.point(f[i])[comp];\n if (val < min) min = val;else if (val > max) max = val;\n }\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n PolynomialBezier.prototype.bounds = function () {\n return {\n x: extrema(this, 0),\n y: extrema(this, 1)\n };\n };\n\n PolynomialBezier.prototype.boundingBox = function () {\n var bounds = this.bounds();\n return {\n left: bounds.x.min,\n right: bounds.x.max,\n top: bounds.y.min,\n bottom: bounds.y.max,\n width: bounds.x.max - bounds.x.min,\n height: bounds.y.max - bounds.y.min,\n cx: (bounds.x.max + bounds.x.min) / 2,\n cy: (bounds.y.max + bounds.y.min) / 2\n };\n };\n\n function intersectData(bez, t1, t2) {\n var box = bez.boundingBox();\n return {\n cx: box.cx,\n cy: box.cy,\n width: box.width,\n height: box.height,\n bez: bez,\n t: (t1 + t2) / 2,\n t1: t1,\n t2: t2\n };\n }\n\n function splitData(data) {\n var split = data.bez.split(0.5);\n return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n }\n\n function boxIntersect(b1, b2) {\n return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n }\n\n function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n if (!boxIntersect(d1, d2)) return;\n\n if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n intersections.push([d1.t, d2.t]);\n return;\n }\n\n var d1s = splitData(d1);\n var d2s = splitData(d2);\n intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n }\n\n PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n if (tolerance === undefined) tolerance = 2;\n if (maxRecursion === undefined) maxRecursion = 7;\n var intersections = [];\n intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n return intersections;\n };\n\n PolynomialBezier.shapeSegment = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n };\n\n PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n };\n\n function crossProduct(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n }\n\n function lineIntersection(start1, end1, start2, end2) {\n var v1 = [start1[0], start1[1], 1];\n var v2 = [end1[0], end1[1], 1];\n var v3 = [start2[0], start2[1], 1];\n var v4 = [end2[0], end2[1], 1];\n var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n if (floatZero(r[2])) return null;\n return [r[0] / r[2], r[1] / r[2]];\n }\n\n function polarOffset(p, angle, length) {\n return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n }\n\n function pointDistance(p1, p2) {\n return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n }\n\n function pointEqual(p1, p2) {\n return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n }\n\n function ZigZagModifier() {}\n\n extendPrototype([ShapeModifier], ZigZagModifier);\n\n ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n };\n\n function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n var angO = angle - Math.PI / 2;\n var angI = angle + Math.PI / 2;\n var px = point[0] + Math.cos(angle) * direction * amplitude;\n var py = point[1] - Math.sin(angle) * direction * amplitude;\n outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n }\n\n function getPerpendicularVector(pt1, pt2) {\n var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n var rot = -Math.PI * 0.5;\n var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n return rotatedVector;\n }\n\n function getProjectingAngle(path, cur) {\n var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n var nextIndex = (cur + 1) % path.length();\n var prevPoint = path.v[prevIndex];\n var nextPoint = path.v[nextIndex];\n var pVector = getPerpendicularVector(prevPoint, nextPoint);\n return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n }\n\n function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n var angle = getProjectingAngle(path, cur);\n var point = path.v[cur % path._length];\n var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n var nextPoint = path.v[(cur + 1) % path._length];\n var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n }\n\n function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n for (var i = 0; i < frequency; i += 1) {\n var t = (i + 1) / (frequency + 1);\n var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n var angle = segment.normalAngle(t);\n var point = segment.point(t);\n setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n direction = -direction;\n }\n\n return direction;\n }\n\n ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n var count = path._length;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n\n if (!path.c) {\n count -= 1;\n }\n\n if (count === 0) return clonedPath;\n var direction = -1;\n var segment = PolynomialBezier.shapeSegment(path, 0);\n zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n for (var i = 0; i < count; i += 1) {\n direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n if (i === count - 1 && !path.c) {\n segment = null;\n } else {\n segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n }\n\n zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n }\n\n return clonedPath;\n };\n\n ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amplitude = this.amplitude.v;\n var frequency = Math.max(0, Math.round(this.frequency.v));\n var pointType = this.pointsType.v;\n\n if (amplitude !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function linearOffset(p1, p2, amount) {\n var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n }\n\n function offsetSegment(segment, amount) {\n var p0;\n var p1a;\n var p1b;\n var p2b;\n var p2a;\n var p3;\n var e;\n e = linearOffset(segment.points[0], segment.points[1], amount);\n p0 = e[0];\n p1a = e[1];\n e = linearOffset(segment.points[1], segment.points[2], amount);\n p1b = e[0];\n p2b = e[1];\n e = linearOffset(segment.points[2], segment.points[3], amount);\n p2a = e[0];\n p3 = e[1];\n var p1 = lineIntersection(p0, p1a, p1b, p2b);\n if (p1 === null) p1 = p1a;\n var p2 = lineIntersection(p2a, p3, p1b, p2b);\n if (p2 === null) p2 = p2a;\n return new PolynomialBezier(p0, p1, p2, p3);\n }\n\n function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n var p0 = seg1.points[3];\n var p1 = seg2.points[0]; // Bevel\n\n if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n if (pointEqual(p0, p1)) return p0; // Round\n\n if (lineJoin === 2) {\n var angleOut = -seg1.tangentAngle(1);\n var angleIn = -seg2.tangentAngle(0) + Math.PI;\n var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n return p1;\n } // Miter\n\n\n var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n var intersection = lineIntersection(t0, p0, p1, t1);\n\n if (intersection && pointDistance(intersection, p0) < miterLimit) {\n outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n return intersection;\n }\n\n return p0;\n }\n\n function getIntersection(a, b) {\n var intersect = a.intersections(b);\n if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n if (intersect.length) return intersect[0];\n return null;\n }\n\n function pruneSegmentIntersection(a, b) {\n var outa = a.slice();\n var outb = b.slice();\n var intersect = getIntersection(a[a.length - 1], b[0]);\n\n if (intersect) {\n outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n outb[0] = b[0].split(intersect[1])[1];\n }\n\n if (a.length > 1 && b.length > 1) {\n intersect = getIntersection(a[0], b[b.length - 1]);\n\n if (intersect) {\n return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n }\n }\n\n return [outa, outb];\n }\n\n function pruneIntersections(segments) {\n var e;\n\n for (var i = 1; i < segments.length; i += 1) {\n e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n segments[i - 1] = e[0];\n segments[i] = e[1];\n }\n\n if (segments.length > 1) {\n e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n segments[segments.length - 1] = e[0];\n segments[0] = e[1];\n }\n\n return segments;\n }\n\n function offsetSegmentSplit(segment, amount) {\n /*\r\n We split each bezier segment into smaller pieces based\r\n on inflection points, this ensures the control point\r\n polygon is convex.\r\n (A cubic bezier can have none, one, or two inflection points)\r\n */\n var flex = segment.inflectionPoints();\n var left;\n var right;\n var split;\n var mid;\n\n if (flex.length === 0) {\n return [offsetSegment(segment, amount)];\n }\n\n if (flex.length === 1 || floatEqual(flex[1], 1)) {\n split = segment.split(flex[0]);\n left = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(right, amount)];\n }\n\n split = segment.split(flex[0]);\n left = split[0];\n var t = (flex[1] - flex[0]) / (1 - flex[0]);\n split = split[1].split(t);\n mid = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n }\n\n function OffsetPathModifier() {}\n\n extendPrototype([ShapeModifier], OffsetPathModifier);\n\n OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n this.lineJoin = data.lj;\n this._isAnimated = this.amount.effectsSequence.length !== 0;\n };\n\n OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n var outputBezier = shapePool.newElement();\n outputBezier.c = inputBezier.c;\n var count = inputBezier.length();\n\n if (!inputBezier.c) {\n count -= 1;\n }\n\n var i;\n var j;\n var segment;\n var multiSegments = [];\n\n for (i = 0; i < count; i += 1) {\n segment = PolynomialBezier.shapeSegment(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n\n if (!inputBezier.c) {\n for (i = count - 1; i >= 0; i -= 1) {\n segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n }\n\n multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n var lastPoint = null;\n var lastSeg = null;\n\n for (i = 0; i < multiSegments.length; i += 1) {\n var multiSegment = multiSegments[i];\n if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n lastSeg = multiSegment[multiSegment.length - 1];\n\n for (j = 0; j < multiSegment.length; j += 1) {\n segment = multiSegment[j];\n\n if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n } else {\n outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n }\n\n outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n lastPoint = segment.points[3];\n }\n }\n\n if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n return outputBezier;\n };\n\n OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n var miterLimit = this.miterLimit.v;\n var lineJoin = this.lineJoin;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = []; // Hindi characters\n\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n var BLACK_FLAG_CODE_POINT = 127988;\n var CANCEL_TAG_CODE_POINT = 917631;\n var A_TAG_CODE_POINT = 917601;\n var Z_TAG_CODE_POINT = 917626;\n var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode); // Remember width with no applied web font\n\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n\n return helper.measureText(text).width;\n }\n\n return {\n measureText: measure\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach(function (data) {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n }\n\n return emptyChar;\n }\n\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n // to avoid collisions between equal chars\n\n var index = _char2;\n\n if (!fontData.cache[index]) {\n var tHelper = fontData.helper;\n\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index] = tHelper.measureText(_char2) / 100;\n }\n }\n\n return fontData.cache[index] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function getCodePoint(string) {\n var codePoint = 0;\n var first = string.charCodeAt(0);\n\n if (first >= 0xD800 && first <= 0xDBFF) {\n var second = string.charCodeAt(1);\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return codePoint;\n } // Skin tone modifiers\n\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(charCode) {\n return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n } // This codepoint may change the appearance of the preceding character.\n // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n // as a colorful image as compared to a monochrome text variant.\n\n\n function isVariationSelector(charCode) {\n return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n } // The regional indicator symbols are a set of 26 alphabetic Unicode\n /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n // two-letter country codes in a way that allows optional special treatment.\n\n\n function isRegionalCode(string) {\n var codePoint = getCodePoint(string);\n\n if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n return true;\n }\n\n return false;\n } // Some Emoji implementations represent combinations of\n // two “regional indicator” letters as a single flag symbol.\n\n\n function isFlagEmoji(string) {\n return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n }\n\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n } // Regional flags start with a BLACK_FLAG_CODE_POINT\n // folowed by 5 chars in the TAG range\n // and end with a CANCEL_TAG_CODE_POINT\n\n\n function isRegionalFlag(text, index) {\n var codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint !== BLACK_FLAG_CODE_POINT) {\n return false;\n }\n\n var count = 0;\n index += 2;\n\n while (count < 5) {\n codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n return false;\n }\n\n count += 1;\n index += 2;\n }\n\n return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isFlagEmoji = isFlagEmoji;\n Font.isRegionalCode = isRegionalCode;\n Font.isCombinedCharacter = isCombinedCharacter;\n Font.isRegionalFlag = isRegionalFlag;\n Font.isVariationSelector = isVariationSelector;\n Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n function SlotManager(animationData) {\n this.animationData = animationData;\n }\n\n SlotManager.prototype.getProp = function (data) {\n if (this.animationData.slots && this.animationData.slots[data.sid]) {\n return Object.assign(data, this.animationData.slots[data.sid].p);\n }\n\n return data;\n };\n\n function slotFactory(animationData) {\n return new SlotManager(animationData);\n }\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; // layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; // list of animated components\n\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n }\n\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n eff = null;\n\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0;\n var len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var LayerExpressionInterface = expressionsInterfaces('layer');\n var EffectsExpressionInterface = expressionsInterfaces('effects');\n var ShapeExpressionInterface = expressionsInterfaces('shape');\n var TextExpressionInterface = expressionsInterfaces('text');\n var CompExpressionInterface = expressionsInterfaces('comp');\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n /**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n function FrameElement() {}\n\n FrameElement.prototype = {\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false; // list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\n\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n\n FootageElement.prototype.prepareFrame = function () {};\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n\n FootageElement.prototype.renderFrame = function () {};\n\n FootageElement.prototype.destroy = function () {};\n\n FootageElement.prototype.initExpressions = function () {\n var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var FootageInterface = expressionsInterfaces('footage');\n this.layerInterface = FootageInterface(this);\n };\n\n FootageElement.prototype.getFootageData = function () {\n return this.footageData;\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n k: [100]\n }, 1, 0.01, this);\n }\n\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 15:\n return this.createFootage(layer);\n\n default:\n return this.createNull(layer);\n }\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n BaseRenderer.prototype.getElementById = function (ind) {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.ind === ind) {\n return this.elements[i];\n }\n }\n\n return null;\n };\n\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n\n if (path.length === 0) {\n return element;\n }\n\n return element.getElementByPath(path);\n };\n\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.slotManager = slotFactory(animData);\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n var effectTypes = {\n TRANSFORM_EFFECT: 'transformEFfect'\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n var mat = new Matrix();\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _localMatMdf: false,\n _opMdf: false,\n mat: mat,\n localMat: mat,\n localOpacity: 1\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } // TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {// this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n }\n }\n }\n\n if (this.finalTransform._matMdf) {\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n }\n\n if (this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n }\n },\n renderLocalTransform: function renderLocalTransform() {\n if (this.localTransforms) {\n var i = 0;\n var len = this.localTransforms.length;\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n while (i < len) {\n if (this.localTransforms[i]._mdf) {\n this.finalTransform._localMatMdf = true;\n }\n\n if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n this.finalTransform._opMdf = true;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._localMatMdf) {\n var localMat = this.finalTransform.localMat;\n this.localTransforms[0].matrix.clone(localMat);\n\n for (i = 1; i < len; i += 1) {\n var lmat = this.localTransforms[i].matrix;\n localMat.multiply(lmat);\n }\n\n localMat.multiply(this.finalTransform.mat);\n }\n\n if (this.finalTransform._opMdf) {\n var localOp = this.finalTransform.localOpacity;\n\n for (i = 0; i < len; i += 1) {\n localOp *= this.localTransforms[i].opacity * 0.01;\n }\n\n this.finalTransform.localOpacity = localOp;\n }\n }\n },\n searchEffectTransforms: function searchEffectTransforms() {\n if (this.renderableEffectsManager) {\n var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n if (transformEffects.length) {\n this.localTransforms = [];\n this.finalTransform.localMat = new Matrix();\n var i = 0;\n var len = transformEffects.length;\n\n for (i = 0; i < len; i += 1) {\n this.localTransforms.push(transformEffects[i]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i;\n var len = transforms.length;\n var ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n } // pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true,\n svgLumaHidden: true,\n offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n if (/firefox/i.test(navigator.userAgent)) {\n ob.svgLumaHidden = false;\n }\n\n return ob;\n }();\n\n var registeredEffects$1 = {};\n var idPrefix = 'filter_result_';\n\n function SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects$1[type]) {\n var Effect = registeredEffects$1[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n\n if (registeredEffects$1[type].countsAsEffect) {\n count += 1;\n }\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n SVGEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect$1(id, effect, countsAsEffect) {\n registeredEffects$1[id] = {\n effect: effect,\n countsAsEffect: countsAsEffect\n };\n }\n\n function SVGBaseElement() {}\n\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n if (this.data.td) {\n this.matteMasks = {};\n var gg = createNS('g');\n gg.setAttribute('id', this.layerId);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n this.globalData.defs.appendChild(gg);\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._localMatMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n this.searchEffectTransforms();\n },\n getMatte: function getMatte(matteType) {\n // This should not be a common case. But for backward compatibility, we'll create the matte object.\n // It solves animations that have two consecutive layers marked as matte masks.\n // Which is an undefined behavior in AE.\n if (!this.matteMasks) {\n this.matteMasks = {};\n }\n\n if (!this.matteMasks[matteType]) {\n var id = this.layerId + '_' + matteType;\n var filId;\n var fil;\n var useElement;\n var gg;\n\n if (matteType === 1 || matteType === 3) {\n var masker = createNS('mask');\n masker.setAttribute('id', id);\n masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n masker.appendChild(useElement);\n this.globalData.defs.appendChild(masker);\n\n if (!featureSupport.maskType && matteType === 1) {\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(useElement);\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (matteType === 2) {\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', id);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); /// /\n\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc); /// /\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n maskGrouper.appendChild(useElement);\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n\n this.matteMasks[matteType] = id;\n }\n\n return this.matteMasks[matteType];\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\n function HierarchyElement() {}\n\n HierarchyElement.prototype = {\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\n\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n\n function RenderableDOMElement() {}\n\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n\n if (this.assetData && this.assetData.sid) {\n this.assetData = globalData.slotManager.getProp(this.assetData);\n }\n\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i;\n var len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0;\n var len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n\n case 'no':\n return renderNoop;\n\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {}\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var iterations;\n var k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n mat.multiply(itemData.transformers[k].mProps.v);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops;\n var i;\n var len;\n var stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n } // gfill.setAttribute('fy','200');\n\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\n\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n\n if (data.d && data.d.sid) {\n data.d = elem.globalData.slotManager.getProp(data.d);\n }\n\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n var shouldCombineNext = false;\n var currentChars = '';\n\n while (i < len) {\n shouldCombine = shouldCombineNext;\n shouldCombineNext = false;\n charCode = text.charCodeAt(i);\n currentChars = text.charAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n if (FontManager.isRegionalFlag(text, i)) {\n currentChars = text.substr(i, 14);\n } else {\n secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (FontManager.isModifier(charCode, secondCharCode)) {\n currentChars = text.substr(i, 2);\n shouldCombine = true;\n } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n currentChars = text.substr(i, 4);\n } else {\n currentChars = text.substr(i, 2);\n }\n }\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isVariationSelector(charCode)) {\n shouldCombine = true;\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n shouldCombine = true;\n shouldCombineNext = true;\n }\n\n if (shouldCombine) {\n charactersArray[charactersArray.length - 1] += currentChars;\n shouldCombine = false;\n } else {\n charactersArray.push(currentChars);\n }\n\n i += currentChars.length;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.setCurrentData(dData);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n } // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n\n var threshold = 0.5 - smoothness * 0.5;\n\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r.v) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO; //\n\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n } //\n\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n\n default:\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true; // Force alignment only works with a single line for now\n\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\n\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n\n ITextElement.prototype.validateText = function () {\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n var emptyShapeData = {\n shapes: []\n };\n\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n\n return data;\n };\n\n SVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n default:\n justify = 'start';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n } //\n\n }\n\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n this.validateText();\n\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n\n extendPrototype([BaseRenderer], SVGRendererBase);\n\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRendererBase.prototype.updateContainerSize = function () {};\n\n SVGRendererBase.prototype.findIndexByInd = function (ind) {\n var i = 0;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ind === ind) {\n return i;\n }\n }\n\n return -1;\n };\n\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n if (elementIndex === -1) {\n return;\n }\n\n if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n this.buildItem(elementIndex);\n this.addPendingElement(element);\n } else {\n var matteElement = elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[pos].tt);\n element.setMatte(matteMask);\n }\n }\n };\n\n SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n var matteElement = this.elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[i].tt);\n element.setMatte(matteMask);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\n };\n /* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n }; */\n\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i;\n var len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n SVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n },\n width: config && config.width,\n height: config && config.height,\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n\n extendPrototype([SVGRendererBase], SVGRenderer);\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n\n var lumaLoader = function lumaLoader() {\n var id = '__lottie_element_luma_buffer';\n var lumaBuffer = null;\n var lumaBufferCtx = null;\n var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n // Naming it solution 2 to mark the extra comment lines.\n\n /*\r\n var svgString = [\r\n '<svg xmlns=\"http://www.w3.org/2000/svg\">',\r\n '<filter id=\"' + id + '\">',\r\n '<feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"',\r\n '0.3, 0.3, 0.3, 0, 0, ',\r\n '0.3, 0.3, 0.3, 0, 0, ',\r\n '0.3, 0.3, 0.3, 0, 0, ',\r\n '0.3, 0.3, 0.3, 0, 0',\r\n '\"/>',\r\n '</filter>',\r\n '</svg>',\r\n ].join('');\r\n var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n var url = URL.createObjectURL(blob);\r\n */\n\n function createLumaSvgFilter() {\n var _svg = createNS('svg');\n\n var fil = createNS('filter');\n var matrix = createNS('feColorMatrix');\n fil.setAttribute('id', id);\n matrix.setAttribute('type', 'matrix');\n matrix.setAttribute('color-interpolation-filters', 'sRGB');\n matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n fil.appendChild(matrix);\n\n _svg.appendChild(fil);\n\n _svg.setAttribute('id', id + '_svg');\n\n if (featureSupport.svgLumaHidden) {\n _svg.style.display = 'none';\n }\n\n return _svg;\n }\n\n function loadLuma() {\n if (!lumaBuffer) {\n svg = createLumaSvgFilter();\n document.body.appendChild(svg);\n lumaBuffer = createTag('canvas');\n lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n lumaBufferCtx.fillRect(0, 0, 1, 1);\n }\n }\n\n function getLuma(canvas) {\n if (!lumaBuffer) {\n loadLuma();\n }\n\n lumaBuffer.width = canvas.width;\n lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n return lumaBuffer;\n }\n\n return {\n load: loadLuma,\n get: getLuma\n };\n };\n\n function createCanvas(width, height) {\n if (featureSupport.offscreenCanvas) {\n return new OffscreenCanvas(width, height);\n }\n\n var canvas = createTag('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n var assetLoader = function () {\n return {\n loadLumaCanvas: lumaLoader.load,\n getLumaCanvas: lumaLoader.get,\n createCanvas: createCanvas\n };\n }();\n\n var registeredEffects = {};\n\n function CVEffects(elem) {\n var i;\n var len = elem.data.ef ? elem.data.ef.length : 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n CVEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect(id, effect) {\n registeredEffects[id] = {\n effect: effect\n };\n }\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n\n this.hasMasks = hasMasks;\n\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\n\n var operationsMap = {\n 1: 'source-in',\n 2: 'source-out',\n 3: 'source-in',\n 4: 'source-out'\n };\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n // If the layer is masked we will use two buffers to store each different states of the drawing\n // This solution is not ideal for several reason. But unfortunately, because of the recursive\n // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n // It might be challenging because the layer most likely is transformed in some way\n if (this.data.tt >= 1) {\n this.buffers = [];\n var canvasContext = this.globalData.canvasContext;\n var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas);\n var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas2);\n\n if (this.data.tt >= 3 && !document._isProxy) {\n assetLoader.loadLumaCanvas();\n }\n }\n\n this.canvasContext = this.globalData.canvasContext;\n this.transformCanvas = this.globalData.transformCanvas;\n this.renderableEffectsManager = new CVEffects(this);\n this.searchEffectTransforms();\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n clearCanvas: function clearCanvas(canvasContext) {\n canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n },\n prepareLayer: function prepareLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[0];\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n this.currentTransform = this.canvasContext.getTransform();\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform);\n }\n },\n exitLayer: function exitLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n // that only contains the content of this layer\n // (if it is a composition, it also includes the nested layers)\n\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx);\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n if (this.data.tt >= 3 && !document._isProxy) {\n // We copy the painted mask to a buffer that has a color matrix filter applied to it\n // that applies the rgb values to the alpha channel\n var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n var lumaBufferCtx = lumaBuffer.getContext('2d');\n lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n this.canvasContext.drawImage(lumaBuffer, 0, 0);\n }\n\n this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n // We use destination-over to draw the global drawing below the current layer\n\n this.canvasContext.globalCompositeOperation = 'destination-over';\n this.canvasContext.drawImage(this.buffers[0], 0, 0);\n this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n this.canvasContext.globalCompositeOperation = 'source-over';\n }\n },\n renderFrame: function renderFrame(forceRender) {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n if (this.data.td === 1 && !forceRender) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.prepareLayer();\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n this.exitLayer();\n\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem[\"do\"] = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n\n CVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type; // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n } else {\n renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n\n renderer.ctxOpacity(currentStyle.coOp);\n\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st' || type === 'gs') {\n // ctx.stroke();\n renderer.ctxStroke();\n\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n\n if (type !== 'st' && type !== 'gs') {\n // ctx.fill(currentStyle.r);\n this.globalData.renderer.ctxFill(currentStyle.r);\n }\n\n renderer.restore();\n }\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {//\n }\n }\n\n if (isMain) {\n this.drawLayer();\n }\n };\n\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n\n styledShape.trNodes = shapeNodes;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n\n styleElem.grd = grd;\n }\n\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\n }\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n var renderer = this.globalData.renderer;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n renderer.save();\n renderer.ctxTransform(renderedLetter.p);\n renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n renderer.ctxFillStyle(renderedLetter.fc);\n lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n renderer.ctxFill(); // this.globalData.canvasContext.fill();\n /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n /// ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n\n CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVSolidElement.prototype.renderInnerContent = function () {\n // var ctx = this.canvasContext;\n this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n };\n\n function CanvasRendererBase() {}\n\n extendPrototype([BaseRenderer], CanvasRendererBase);\n\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n };\n\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n };\n\n CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n this.canvasContext.fillStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n this.canvasContext.strokeStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n this.canvasContext.lineWidth = value;\n };\n\n CanvasRendererBase.prototype.ctxLineCap = function (value) {\n this.canvasContext.lineCap = value;\n };\n\n CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n this.canvasContext.lineJoin = value;\n };\n\n CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n this.canvasContext.miterLimit = value;\n };\n\n CanvasRendererBase.prototype.ctxFill = function (rule) {\n this.canvasContext.fill(rule);\n };\n\n CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n this.canvasContext.fillRect(x, y, w, h);\n };\n\n CanvasRendererBase.prototype.ctxStroke = function () {\n this.canvasContext.stroke();\n };\n\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRendererBase.prototype.save = function () {\n this.canvasContext.save();\n };\n\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.restore(actionFlag);\n };\n\n CanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.contextData.setContext(this.canvasContext);\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n\n CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n this.reset();\n var elementWidth;\n var elementHeight;\n\n if (width) {\n elementWidth = width;\n elementHeight = height;\n this.canvasContext.canvas.width = elementWidth;\n this.canvasContext.canvas.height = elementHeight;\n } else {\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n } else {\n elementWidth = this.canvasContext.canvas.width;\n elementHeight = this.canvasContext.canvas.height;\n }\n\n this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n }\n\n var elementRel;\n var animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\r\n for(i=0;i<len;i+=1){\r\n if(this.elements[i] && this.elements[i].data.ty === 0){\r\n this.elements[i].resize(this.globalData.transformCanvas);\r\n }\r\n } */\n\n this.ctxTransform(this.transformCanvas.props);\n this.canvasContext.beginPath();\n this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n this.canvasContext.closePath();\n this.canvasContext.clip();\n this.renderFrame(this.renderedFrame, true);\n };\n\n CanvasRendererBase.prototype.destroy = function () {\n if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n // console.log('NEW: ',num);\n\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\n };\n\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function CanvasContext() {\n this.opacity = -1;\n this.transform = createTypedArray('float32', 16);\n this.fillStyle = '';\n this.strokeStyle = '';\n this.lineWidth = '';\n this.lineCap = '';\n this.lineJoin = '';\n this.miterLimit = '';\n this.id = Math.random();\n }\n\n function CVContextData() {\n this.stack = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n var i;\n var len = 15;\n\n for (i = 0; i < len; i += 1) {\n var canvasContext = new CanvasContext();\n this.stack[i] = canvasContext;\n }\n\n this._length = len;\n this.nativeContext = null;\n this.transformMat = new Matrix();\n this.currentOpacity = 1; //\n\n this.currentFillStyle = '';\n this.appliedFillStyle = ''; //\n\n this.currentStrokeStyle = '';\n this.appliedStrokeStyle = ''; //\n\n this.currentLineWidth = '';\n this.appliedLineWidth = ''; //\n\n this.currentLineCap = '';\n this.appliedLineCap = ''; //\n\n this.currentLineJoin = '';\n this.appliedLineJoin = ''; //\n\n this.appliedMiterLimit = '';\n this.currentMiterLimit = '';\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.stack[i] = new CanvasContext();\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.stack[this.cArrPos].opacity = 1;\n };\n\n CVContextData.prototype.restore = function (forceRestore) {\n this.cArrPos -= 1;\n var currentContext = this.stack[this.cArrPos];\n var transform = currentContext.transform;\n var i;\n var arr = this.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = transform[i];\n }\n\n if (forceRestore) {\n this.nativeContext.restore();\n var prevStack = this.stack[this.cArrPos + 1];\n this.appliedFillStyle = prevStack.fillStyle;\n this.appliedStrokeStyle = prevStack.strokeStyle;\n this.appliedLineWidth = prevStack.lineWidth;\n this.appliedLineCap = prevStack.lineCap;\n this.appliedLineJoin = prevStack.lineJoin;\n this.appliedMiterLimit = prevStack.miterLimit;\n }\n\n this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n this.nativeContext.globalAlpha = currentContext.opacity;\n this.currentOpacity = currentContext.opacity;\n }\n\n this.currentFillStyle = currentContext.fillStyle;\n this.currentStrokeStyle = currentContext.strokeStyle;\n this.currentLineWidth = currentContext.lineWidth;\n this.currentLineCap = currentContext.lineCap;\n this.currentLineJoin = currentContext.lineJoin;\n this.currentMiterLimit = currentContext.miterLimit;\n };\n\n CVContextData.prototype.save = function (saveOnNativeFlag) {\n if (saveOnNativeFlag) {\n this.nativeContext.save();\n }\n\n var props = this.cTr.props;\n\n if (this._length <= this.cArrPos) {\n this.duplicate();\n }\n\n var currentStack = this.stack[this.cArrPos];\n var i;\n\n for (i = 0; i < 16; i += 1) {\n currentStack.transform[i] = props[i];\n }\n\n this.cArrPos += 1;\n var newStack = this.stack[this.cArrPos];\n newStack.opacity = currentStack.opacity;\n newStack.fillStyle = currentStack.fillStyle;\n newStack.strokeStyle = currentStack.strokeStyle;\n newStack.lineWidth = currentStack.lineWidth;\n newStack.lineCap = currentStack.lineCap;\n newStack.lineJoin = currentStack.lineJoin;\n newStack.miterLimit = currentStack.miterLimit;\n };\n\n CVContextData.prototype.setOpacity = function (value) {\n this.stack[this.cArrPos].opacity = value;\n };\n\n CVContextData.prototype.setContext = function (value) {\n this.nativeContext = value;\n };\n\n CVContextData.prototype.fillStyle = function (value) {\n if (this.stack[this.cArrPos].fillStyle !== value) {\n this.currentFillStyle = value;\n this.stack[this.cArrPos].fillStyle = value;\n }\n };\n\n CVContextData.prototype.strokeStyle = function (value) {\n if (this.stack[this.cArrPos].strokeStyle !== value) {\n this.currentStrokeStyle = value;\n this.stack[this.cArrPos].strokeStyle = value;\n }\n };\n\n CVContextData.prototype.lineWidth = function (value) {\n if (this.stack[this.cArrPos].lineWidth !== value) {\n this.currentLineWidth = value;\n this.stack[this.cArrPos].lineWidth = value;\n }\n };\n\n CVContextData.prototype.lineCap = function (value) {\n if (this.stack[this.cArrPos].lineCap !== value) {\n this.currentLineCap = value;\n this.stack[this.cArrPos].lineCap = value;\n }\n };\n\n CVContextData.prototype.lineJoin = function (value) {\n if (this.stack[this.cArrPos].lineJoin !== value) {\n this.currentLineJoin = value;\n this.stack[this.cArrPos].lineJoin = value;\n }\n };\n\n CVContextData.prototype.miterLimit = function (value) {\n if (this.stack[this.cArrPos].miterLimit !== value) {\n this.currentMiterLimit = value;\n this.stack[this.cArrPos].miterLimit = value;\n }\n };\n\n CVContextData.prototype.transform = function (props) {\n this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n currentTransform.cloneFromProps(this.transformMat.props);\n var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CVContextData.prototype.opacity = function (op) {\n var currentOpacity = this.stack[this.cArrPos].opacity;\n currentOpacity *= op < 0 ? 0 : op;\n\n if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n if (this.currentOpacity !== op) {\n this.nativeContext.globalAlpha = op;\n this.currentOpacity = op;\n }\n\n this.stack[this.cArrPos].opacity = currentOpacity;\n }\n };\n\n CVContextData.prototype.fill = function (rule) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fill(rule);\n };\n\n CVContextData.prototype.fillRect = function (x, y, w, h) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fillRect(x, y, w, h);\n };\n\n CVContextData.prototype.stroke = function () {\n if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n this.appliedStrokeStyle = this.currentStrokeStyle;\n this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n }\n\n if (this.appliedLineWidth !== this.currentLineWidth) {\n this.appliedLineWidth = this.currentLineWidth;\n this.nativeContext.lineWidth = this.appliedLineWidth;\n }\n\n if (this.appliedLineCap !== this.currentLineCap) {\n this.appliedLineCap = this.currentLineCap;\n this.nativeContext.lineCap = this.appliedLineCap;\n }\n\n if (this.appliedLineJoin !== this.currentLineJoin) {\n this.appliedLineJoin = this.currentLineJoin;\n this.nativeContext.lineJoin = this.appliedLineJoin;\n }\n\n if (this.appliedMiterLimit !== this.currentMiterLimit) {\n this.appliedMiterLimit = this.currentMiterLimit;\n this.nativeContext.miterLimit = this.appliedMiterLimit;\n }\n\n this.nativeContext.stroke();\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.layers = null;\n this.elements = null;\n };\n\n CVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || '',\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n\n if (this.renderConfig.clearCanvas) {\n this.ctxTransform = this.contextData.transform.bind(this.contextData);\n this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n this.ctxFill = this.contextData.fill.bind(this.contextData);\n this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n this.save = this.contextData.save.bind(this.contextData);\n }\n }\n\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\n }\n\n if (this.finalTransform._opMdf) {\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n HSolidElement.prototype.createContent = function () {\n var rect;\n\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n\n this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n\n return point;\n };\n\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i;\n var len = shape._length;\n var vPoint;\n var oPoint;\n var nextIPoint;\n var nextVPoint;\n\n if (len <= 1) {\n return;\n }\n\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n };\n\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n // eslint-disable-line no-plusplus\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b |= 0; // eslint-disable-line no-bitwise\n\n a |= 0; // eslint-disable-line no-bitwise\n\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {//\n } else if (a === 0) {\n t = -c / b;\n\n if (t > 0 && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n } else {\n b2ac = b * b - 4 * c * a;\n\n if (b2ac >= 0) {\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n }\n }\n\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n }\n }\n };\n\n HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n var width = 0;\n\n if (widthProperty.keyframes) {\n for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n var kfw = widthProperty.keyframes[i].s;\n\n if (kfw > width) {\n width = kfw;\n }\n }\n\n width *= widthProperty.mult;\n } else {\n width = widthProperty.v * widthProperty.mult;\n }\n\n boundingBox.x -= width;\n boundingBox.xMax += width;\n boundingBox.y -= width;\n boundingBox.yMax += width;\n };\n\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n\n var changed = false;\n\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n var shapeStyle = this.shapeCont.style;\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n shapeStyle.transform = shapeTransform;\n shapeStyle.webkitTransform = shapeTransform;\n }\n }\n };\n\n function HTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n\n this.checkParenting();\n };\n\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n innerElemStyle.fill = textColor;\n innerElemStyle.color = textColor;\n\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i;\n var len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan;\n var tParent;\n var tCont;\n var matrixHelper = this.mHelper;\n var shapes;\n var shapeStr = '';\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('path');\n tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n } // tSpan.setAttribute('visibility', 'hidden');\n\n\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n\n matrixHelper.reset();\n\n if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n\n if (shapeData && shapeData.shapes) {\n // document.body.appendChild is needed to get exact measure of shape\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n var tContStyle = tCont.style;\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n tContStyle.transform = tContTranslation;\n tContStyle.webkitTransform = tContTranslation;\n letters[i].yOffset = boundingBox.y - 1;\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n\n tParent.appendChild(tCont);\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent); //\n\n var tStyle = tSpan.style;\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n tStyle.transform = tSpanTranslation;\n tStyle.webkitTransform = tSpanTranslation;\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } //\n\n\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n\n HTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var svgStyle;\n\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n }\n\n if (this.isMasked && this.finalTransform._matMdf) {\n // Todo Benchmark if using this is better than getBBox\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n svgStyle = this.svgElement.style;\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n svgStyle.transform = translation;\n svgStyle.webkitTransform = translation;\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i;\n var len;\n var count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n } else {\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.webkitTransform = renderedLetter.m;\n textSpan.style.transform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n svgStyle = this.svgElement.style;\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n svgStyle.transform = svgTransform;\n svgStyle.webkitTransform = svgTransform;\n }\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i;\n var len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n this.finalTransform = {\n mProp: this\n };\n }\n\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i;\n var len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n perspectiveStyle = comp.perspectiveElem.style;\n containerStyle = comp.container.style;\n var perspective = this.pe.v + 'px';\n var origin = '0px 0px 0px';\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveStyle.perspective = perspective;\n perspectiveStyle.webkitPerspective = perspective;\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n perspectiveStyle.transform = matrix;\n perspectiveStyle.webkitTransform = matrix;\n }\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n\n if (this.hierarchy) {\n len = this.hierarchy.length - 1;\n\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector;\n\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n var matValue = this.mat.toCSS();\n containerStyle = comp.container.style;\n containerStyle.transform = matValue;\n containerStyle.webkitTransform = matValue;\n }\n\n if (this.pe._mdf) {\n perspectiveStyle = comp.perspectiveElem.style;\n perspectiveStyle.perspective = this.pe.v + 'px';\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n\n this.mat.clone(this._prevMat);\n }\n }\n\n this._isFirstFrame = false;\n };\n\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HybridRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement;\n var nextLayer;\n var tmpDOMElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n\n return new HShapeElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n\n return new HImageElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n\n return new HSolidElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n\n return null;\n };\n\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n var style;\n var containerStyle;\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n style = perspectiveElem.style;\n style.width = this.globalData.compSize.w + 'px';\n style.height = this.globalData.compSize.h + 'px';\n var center = '50% 50%';\n style.webkitTransformOrigin = center;\n style.mozTransformOrigin = center;\n style.transformOrigin = center;\n containerStyle = container.style;\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n containerStyle.transform = matrix;\n containerStyle.webkitTransform = matrix;\n }\n\n perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n\n len = this.threeDElements.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRendererBase.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n var style = resizerElem.style;\n style.width = animData.w + 'px';\n style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n style.transformStyle = 'flat';\n style.mozTransformStyle = 'flat';\n style.webkitTransformStyle = 'flat';\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData; // Mask animation\n\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRendererBase.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx;\n var sy;\n var tx;\n var ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n var style = this.resizerElem.style;\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n style.transform = style.webkitTransform;\n };\n\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i;\n var len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n var style = this.threeDElements[i].perspectiveElem.style;\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n style.perspective = style.webkitPerspective;\n }\n }\n };\n\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n },\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([HybridRendererBase], HybridRenderer);\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return null; // return {active:false};\n }\n\n Object.defineProperty(_thisLayerFunction, '_name', {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n /* eslint-disable */\n\n /*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\n function seedRandom(pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$2(obj),\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n }\n\n ;\n\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n var _lottieGlobal = {};\n initialize$2(BMMath);\n\n function resetFrame() {\n _lottieGlobal = {};\n }\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n }\n\n function $bm_neg(a) {\n var tOfA = _typeof$1(a);\n\n if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n\n if (a.propType) {\n return a.v;\n }\n\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n\n return a % b;\n }\n\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n\n default:\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n\n b = l; // achromatic\n\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n\n if (t <= tMin) {\n return value1;\n }\n\n if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i;\n var len = max.length;\n\n if (!min) {\n min = createTypedArray('float32', len);\n }\n\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n // Bail out if we don't want expressions\n function noOp(_value) {\n return _value;\n }\n\n if (!elem.globalData.renderConfig.runExpressions) {\n return noOp;\n }\n\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n }\n\n iWiggle += 1;\n } // var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n }\n\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n\n return arr;\n }\n\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n lenKey = arr.length;\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n\n return value.substring(init, end);\n }\n\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n\n return value.substr(init, end);\n }\n\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n expression_function();\n this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n } // Bundlers will see these as dead code and unless we reference them\n\n\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n ob.resetFrame = resetFrame;\n return ob;\n }();\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n ob.resetFrame = ExpressionManager.resetFrame;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n\n return ob;\n }();\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n\n return this._mask.op.v * 100;\n }\n });\n\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i;\n var len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n\n var value = '';\n\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n val = property.v * mult;\n\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n\n return expressionValue;\n };\n } // TODO: try to avoid using this getter\n\n\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n\n return MultidimensionalPropertyInterface(property);\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s)\n });\n\n var _px;\n\n var _py;\n\n var _pz;\n\n var _transformFactory;\n\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n }\n\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n\n default:\n return null;\n }\n }\n\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n\n return effectElements[i]();\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n _name: {\n value: shape.nm\n },\n ix: {\n value: shape.ix\n },\n propertyIndex: {\n value: shape.ix\n },\n mn: {\n value: shape.mn\n },\n propertyGroup: {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); // interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function get() {\n return 'a';\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function get() {\n return dashOb;\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n\n if (value === 0) {\n return propertyGroup;\n }\n\n return interfaces[value - 1];\n }\n\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function parentGroupWrapper() {\n return propertyGroup;\n }\n\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n\n if (!_sourceText || stringValue !== _sourceText.value) {\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n Object.defineProperty(_sourceText, 'style', {\n get: function get() {\n return {\n fillColor: elem.textProperty.currentData.fc\n };\n }\n });\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n var propertyNameIndex = value.indexOf(currentPropertyName);\n\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n return '';\n }\n\n return init;\n };\n\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n\n var interfaces = {\n layer: LayerExpressionInterface,\n effects: EffectsExpressionInterface,\n comp: CompExpressionInterface,\n shape: ShapeExpressionInterface,\n text: TextExpressionInterface,\n footage: FootageInterface\n };\n\n function getInterface(type) {\n return interfaces[type] || null;\n }\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n\n if (v1.length) {\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.001; // frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n\n if (samples <= 1) {\n return this.pv;\n }\n\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n\n var sampleValue;\n\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n\n i += 1;\n }\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n } /// /\n\n\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n\n return matrix; /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) {\n // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) {\n // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n if (magnitude === 0) {\n return [0, 0];\n }\n\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n };\n }\n\n function initialize$1() {\n addPropertyDecorator();\n }\n\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\n\n SVGComposableEffect.prototype = {\n createMergeNode: function createMergeNode(resultId, ins) {\n var feMerge = createNS('feMerge');\n feMerge.setAttribute('result', resultId);\n var feMergeNode;\n var i;\n\n for (i = 0; i < ins.length; i += 1) {\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', ins[i]);\n feMerge.appendChild(feMergeNode);\n feMerge.appendChild(feMergeNode);\n }\n\n return feMerge;\n }\n };\n\n var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n\n function SVGTintFilter(filter, filterManager, elem, id, source) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n this.linearFilter = feColorMatrix;\n feColorMatrix.setAttribute('result', id + '_tint_1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n filter.appendChild(feMerge);\n }\n\n extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id);\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(fil, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n filter.appendChild(feComponentTransfer);\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB);\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n } // Green\n\n\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n } // Blue\n\n\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n } // Alpha\n\n\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n } // RGB\n\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n }\n\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n var filterSize = filterManager.data.fs || globalFilterSize;\n filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = createNS('feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', id + '_drop_shadow_1');\n feOffset.setAttribute('result', id + '_drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = createNS('feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', id + '_drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', id + '_drop_shadow_3');\n feComposite.setAttribute('in2', id + '_drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', id + '_drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n filter.appendChild(feMerge); //\n }\n\n extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n }\n };\n\n var _svgMatteSymbols = [];\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n\n i += 1;\n }\n\n var nextChild;\n\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n\n _svgMatteSymbols.push(mask);\n\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n\n elem.setMatte(mask.layerId);\n };\n\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('result', id);\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function TransformEffect() {}\n\n TransformEffect.prototype.init = function (effectsManager) {\n this.effectsManager = effectsManager;\n this.type = effectTypes.TRANSFORM_EFFECT;\n this.matrix = new Matrix();\n this.opacity = -1;\n this._mdf = false;\n this._opMdf = false;\n };\n\n TransformEffect.prototype.renderFrame = function (forceFrame) {\n this._opMdf = false;\n this._mdf = false;\n\n if (forceFrame || this.effectsManager._mdf) {\n var effectElements = this.effectsManager.effectElements;\n var anchor = effectElements[0].p.v;\n var position = effectElements[1].p.v;\n var isUniformScale = effectElements[2].p.v === 1;\n var scaleHeight = effectElements[3].p.v;\n var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n var skew = effectElements[5].p.v;\n var skewAxis = effectElements[6].p.v;\n var rotation = effectElements[7].p.v;\n this.matrix.reset();\n this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n this.matrix.rotate(-rotation * degToRads);\n this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n this.matrix.translate(position[0], position[1], 0);\n this._mdf = true;\n\n if (this.opacity !== effectElements[8].p.v) {\n this.opacity = effectElements[8].p.v;\n this._opMdf = true;\n }\n }\n };\n\n function SVGTransformEffect(_, filterManager) {\n this.init(filterManager);\n }\n\n extendPrototype([TransformEffect], SVGTransformEffect);\n\n function CVTransformEffect(effectsManager) {\n this.init(effectsManager);\n }\n\n extendPrototype([TransformEffect], CVTransformEffect);\n\n registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n ShapeModifiers.registerModifier('zz', ZigZagModifier);\n ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n setExpressionsPlugin(Expressions);\n setExpressionInterfaces(getInterface);\n initialize$1();\n initialize(); // Registering svg effects\n\n registerEffect$1(20, SVGTintFilter, true);\n registerEffect$1(21, SVGFillFilter, true);\n registerEffect$1(22, SVGStrokeEffect, false);\n registerEffect$1(23, SVGTritoneFilter, true);\n registerEffect$1(24, SVGProLevelsFilter, true);\n registerEffect$1(25, SVGDropShadowEffect, true);\n registerEffect$1(28, SVGMatte3Effect, false);\n registerEffect$1(29, SVGGaussianBlurEffect, true);\n registerEffect$1(35, SVGTransformEffect, false);\n registerEffect(35, CVTransformEffect);\n\n return lottie;\n\n}));\n","/**\n * Copyright 2021 Design Barn Inc.\n */\n\nimport { css } from \"lit\";\n\nexport default css`\n * {\n box-sizing: border-box;\n }\n\n :host {\n --lottie-player-toolbar-height: 35px;\n --lottie-player-toolbar-background-color: transparent;\n --lottie-player-toolbar-icon-color: #999;\n --lottie-player-toolbar-icon-hover-color: #222;\n --lottie-player-toolbar-icon-active-color: #555;\n --lottie-player-seeker-track-color: #ccc;\n --lottie-player-seeker-thumb-color: rgba(0, 107, 120, 0.8);\n --lottie-player-seeker-display: block;\n\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .main {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n }\n\n .animation {\n width: 100%;\n height: 100%;\n display: flex;\n }\n .animation.controls {\n height: calc(100% - 35px);\n }\n\n .toolbar {\n display: flex;\n align-items: center;\n justify-items: center;\n background-color: var(--lottie-player-toolbar-background-color);\n margin: 0 5px;\n height: 35px;\n }\n\n .toolbar button {\n cursor: pointer;\n fill: var(--lottie-player-toolbar-icon-color);\n display: flex;\n background: none;\n border: 0;\n padding: 0;\n outline: none;\n height: 100%;\n }\n\n .toolbar button:hover {\n fill: var(--lottie-player-toolbar-icon-hover-color);\n }\n\n .toolbar button.active {\n fill: var(--lottie-player-toolbar-icon-active-color);\n }\n\n .toolbar button.active:hover {\n fill: var(--lottie-player-toolbar-icon-hover-color);\n }\n\n .toolbar button:focus {\n outline: 1px dotted var(--lottie-player-toolbar-icon-active-color);\n }\n\n .toolbar button svg {\n }\n\n .toolbar button.disabled svg {\n display: none;\n }\n\n .seeker {\n -webkit-appearance: none;\n width: 95%;\n outline: none;\n background-color: var(--lottie-player-toolbar-background-color);\n display: var(--lottie-player-seeker-display);\n }\n\n .seeker::-webkit-slider-runnable-track {\n width: 100%;\n height: 5px;\n cursor: pointer;\n background: var(--lottie-player-seeker-track-color);\n border-radius: 3px;\n }\n .seeker::-webkit-slider-thumb {\n height: 15px;\n width: 15px;\n border-radius: 50%;\n background: var(--lottie-player-seeker-thumb-color);\n cursor: pointer;\n -webkit-appearance: none;\n margin-top: -5px;\n }\n .seeker:focus::-webkit-slider-runnable-track {\n background: #999;\n }\n .seeker::-moz-range-track {\n width: 100%;\n height: 5px;\n cursor: pointer;\n background: var(--lottie-player-seeker-track-color);\n border-radius: 3px;\n }\n .seeker::-moz-range-thumb {\n height: 15px;\n width: 15px;\n border-radius: 50%;\n background: var(--lottie-player-seeker-thumb-color);\n cursor: pointer;\n }\n .seeker::-ms-track {\n width: 100%;\n height: 5px;\n cursor: pointer;\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n .seeker::-ms-fill-lower {\n background: var(--lottie-player-seeker-track-color);\n border-radius: 3px;\n }\n .seeker::-ms-fill-upper {\n background: var(--lottie-player-seeker-track-color);\n border-radius: 3px;\n }\n .seeker::-ms-thumb {\n border: 0;\n height: 15px;\n width: 15px;\n border-radius: 50%;\n background: var(--lottie-player-seeker-thumb-color);\n cursor: pointer;\n }\n .seeker:focus::-ms-fill-lower {\n background: var(--lottie-player-seeker-track-color);\n }\n .seeker:focus::-ms-fill-upper {\n background: var(--lottie-player-seeker-track-color);\n }\n\n .error {\n display: flex;\n justify-content: center;\n height: 100%;\n align-items: center;\n }\n`;\n","export const LOTTIE_PLAYER_VERSION = \"2.0.3\"; \nexport const LOTTIE_WEB_VERSION = \"^5.12.2\";\n","// eslint-disable-next-line header/header\nimport { LitElement, html } from \"lit\";\nimport { customElement, property, query } from \"lit/decorators.js\";\nimport { TemplateResult } from \"lit/html.js\";\nimport * as lottie from \"lottie-web/build/player/lottie\";\n\nimport styles from \"./lottie-player.styles\";\nimport { LOTTIE_PLAYER_VERSION, LOTTIE_WEB_VERSION } from \"./versions\";\n\n// import ResizeObserver from \"resize-observer-polyfill\";\n\n// Define valid player states\nexport enum PlayerState {\n Destroyed = \"destroyed\",\n Error = \"error\",\n Frozen = \"frozen\",\n Loading = \"loading\",\n Paused = \"paused\",\n Playing = \"playing\",\n Stopped = \"stopped\",\n}\n\n// Define play modes\nexport enum PlayMode {\n Bounce = \"bounce\",\n Normal = \"normal\",\n}\n\n// Define player events\nexport enum PlayerEvents {\n Complete = \"complete\",\n Destroyed = \"destroyed\",\n Error = \"error\",\n Frame = \"frame\",\n Freeze = \"freeze\",\n Load = \"load\",\n Loop = \"loop\",\n Pause = \"pause\",\n Play = \"play\",\n Ready = \"ready\",\n Rendered = \"rendered\",\n Stop = \"stop\",\n}\n\nexport interface Versions {\n lottiePlayerVersion: string;\n lottieWebVersion: string;\n}\n\n/**\n * Parse a resource into a JSON object or a URL string\n */\nexport function parseSrc(src: string | object): string | object {\n if (typeof src === \"object\") {\n return src;\n }\n\n try {\n return JSON.parse(src);\n } catch (e) {\n // Try construct an absolute URL from the src URL\n const srcUrl: URL = new URL(src, window.location.href);\n\n return srcUrl.toString();\n }\n}\n\nfunction isLottie(json: Record<string, any>): boolean {\n const mandatory: string[] = [\"v\", \"ip\", \"op\", \"layers\", \"fr\", \"w\", \"h\"];\n\n return mandatory.every((field: string) =>\n Object.prototype.hasOwnProperty.call(json, field)\n );\n}\n\nasync function fromURL(url: string): Promise<Record<string, any>> {\n if (typeof url !== \"string\") {\n throw new Error(`The url value must be a string`);\n }\n\n let json;\n\n try {\n // Try construct an absolute URL from the src URL\n const srcUrl: URL = new URL(url);\n\n // Fetch the JSON file from the URL\n const result: any = await fetch(srcUrl.toString());\n\n json = await result.json();\n } catch (err) {\n throw new Error(\n `An error occurred while trying to load the Lottie file from URL`\n );\n }\n\n return json;\n}\n/**\n * LottiePlayer web component class\n *\n * @export\n * @class LottiePlayer\n * @extends {LitElement}\n */\n@customElement(\"lottie-player\")\nexport class LottiePlayer extends LitElement {\n /**\n * Autoplay animation on load.\n */\n @property({ type: Boolean })\n public autoplay: boolean = false;\n\n /**\n * Background color.\n */\n @property({ type: String, reflect: true })\n public background?: string = \"transparent\";\n\n /**\n * Show controls.\n */\n @property({ type: Boolean })\n public controls: boolean = false;\n\n /**\n * Number of times to loop animation.\n */\n @property({ type: Number })\n public count?: number;\n\n /**\n * Player state.\n */\n @property({ type: String })\n public currentState: PlayerState = PlayerState.Loading;\n\n /**\n * Animation description for screen readers.\n */\n @property({ type: String })\n public description: string = \"Lottie animation\";\n\n /**\n * Direction of animation.\n */\n @property({ type: Number })\n public direction: number = 1;\n\n /**\n * Disable checking if the Lottie is valid before loading\n */\n @property({ type: Boolean })\n public disableCheck?: boolean = false;\n\n /**\n * Disable using shadow dom as the root\n */\n @property({ type: Boolean })\n public disableShadowDOM: boolean = false;\n\n /**\n * Whether to play on mouse hover\n */\n @property({ type: Boolean })\n public hover: boolean = false;\n\n /**\n * Intermission\n */\n @property()\n public intermission: number = 1;\n\n /**\n * Whether to loop animation.\n */\n @property({ type: Boolean, reflect: true })\n public loop: boolean = false;\n\n /**\n * Play mode.\n */\n @property()\n public mode: PlayMode = PlayMode.Normal;\n\n /**\n * Aspect ratio to pass to lottie-web.\n */\n @property({ type: String })\n public preserveAspectRatio: string = \"xMidYMid meet\";\n\n /**\n * Renderer to use.\n */\n @property({ type: String })\n public renderer: \"svg\" = \"svg\";\n\n /**\n * Viewbox size for renderer settings\n */\n @property({ type: String })\n public viewBoxSize?: string;\n\n /**\n * seeker\n */\n\n @property()\n public seeker: any;\n\n /**\n * Animation speed.\n */\n @property({ type: Number })\n public speed: number = 1;\n\n /**\n * Bodymovin JSON data or URL to JSON.\n */\n @property({ type: String })\n public src?: string;\n\n /**\n * Enable web workers\n */\n @property({ type: Boolean })\n public webworkers?: boolean;\n\n /**\n * Animation container.\n */\n @query(\".animation\")\n protected container!: HTMLElement;\n\n private _io: IntersectionObserver | undefined = undefined;\n\n // private _ro: ResizeObserver | undefined = undefined;\n private _lottie?: any;\n\n private _prevState?: any;\n\n private _counter: number = 1;\n\n /**\n * Configure and initialize lottie-web player instance.\n */\n public async load(src: string | object) {\n const options: any = {\n container: this.container,\n loop: false,\n autoplay: false,\n renderer: this.renderer,\n rendererSettings: {\n preserveAspectRatio: this.preserveAspectRatio,\n clearCanvas: false,\n progressiveLoad: true,\n hideOnTransparent: true,\n ...(this.viewBoxSize && { viewBoxSize: this.viewBoxSize }),\n },\n };\n\n // Load the resource information\n try {\n const srcParsed = parseSrc(src);\n let jsonData = {};\n let srcAttrib = typeof srcParsed === \"string\" ? \"path\" : \"animationData\";\n\n // Clear previous animation, if any\n if (this._lottie) {\n this._lottie.destroy();\n }\n\n if (this.webworkers) {\n lottie.useWebWorker(true);\n }\n\n // Initialize lottie player and load animation\n this._lottie = lottie.loadAnimation({\n ...options,\n\n [srcAttrib]: srcParsed,\n });\n\n // Attach the event listeners before we check the requested json file for errors\n this._attachEventListeners();\n\n if (!this.disableCheck) {\n // Fetch resource if src is a remote URL\n if (srcAttrib === \"path\") {\n jsonData = await fromURL(srcParsed as string);\n srcAttrib = \"animationData\";\n } else {\n jsonData = srcParsed;\n }\n\n if (!isLottie(jsonData)) {\n this.currentState = PlayerState.Error;\n this.dispatchEvent(new CustomEvent(PlayerEvents.Error));\n }\n }\n } catch (err) {\n this.currentState = PlayerState.Error;\n this.dispatchEvent(new CustomEvent(PlayerEvents.Error));\n }\n }\n\n /**\n * Returns the lottie-web instance used in the component.\n */\n public getLottie(): any {\n return this._lottie;\n }\n\n /**\n * Returns the lottie-web version and this player's version\n */\n public getVersions(): Versions {\n return {\n lottieWebVersion: LOTTIE_WEB_VERSION,\n lottiePlayerVersion: LOTTIE_PLAYER_VERSION,\n };\n }\n\n /**\n * Start playing animation.\n */\n public play() {\n if (!this._lottie) {\n return;\n }\n\n this._lottie.play();\n this.currentState = PlayerState.Playing;\n\n this.dispatchEvent(new CustomEvent(PlayerEvents.Play));\n }\n\n /**\n * Pause animation play.\n */\n public pause(): void {\n if (!this._lottie) {\n return;\n }\n\n this._lottie.pause();\n this.currentState = PlayerState.Paused;\n\n this.dispatchEvent(new CustomEvent(PlayerEvents.Pause));\n }\n\n /**\n * Stops animation play.\n */\n public stop(): void {\n if (!this._lottie) {\n return;\n }\n\n this._counter = 1;\n this._lottie.stop();\n this.currentState = PlayerState.Stopped;\n\n this.dispatchEvent(new CustomEvent(PlayerEvents.Stop));\n }\n\n /**\n * Destroy animation and lottie-player element.\n */\n public destroy(): void {\n if (!this._lottie) {\n return;\n }\n\n this._lottie.destroy();\n this._lottie = null;\n this.currentState = PlayerState.Destroyed;\n this.dispatchEvent(new CustomEvent(PlayerEvents.Destroyed));\n this.remove();\n }\n\n /**\n * Seek to a given frame.\n */\n public seek(value: number | string): void {\n if (!this._lottie) {\n return;\n }\n\n // Extract frame number from either number or percentage value\n const matches = /^(\\d+)(%?)$/.exec(value.toString());\n\n if (!matches) {\n return;\n }\n\n // Calculate and set the frame number\n const frame =\n matches[2] === \"%\"\n ? (this._lottie.totalFrames * Number(matches[1])) / 100\n : Number(matches[1]);\n\n // Set seeker to new frame number\n this.seeker = frame;\n\n // Send lottie player to the new frame\n if (this.currentState === PlayerState.Playing) {\n this._lottie.goToAndPlay(frame, true);\n } else {\n this._lottie.goToAndStop(frame, true);\n this._lottie.pause();\n }\n }\n\n /**\n * Snapshot the current frame as SVG.\n *\n * If 'download' argument is boolean true, then a download is triggered in browser.\n */\n public snapshot(download: boolean = true): string | void {\n if (!this.shadowRoot) return;\n\n // Get SVG element and serialize markup\n const svgElement = this.shadowRoot.querySelector(\".animation svg\") as Node;\n const data = new XMLSerializer().serializeToString(svgElement);\n\n // Trigger file download\n if (download) {\n const element = document.createElement(\"a\");\n\n element.href = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(\n data\n )}`;\n element.download = `download_${this.seeker}.svg`;\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n return data;\n }\n\n /**\n * Sets animation play speed.\n *\n * @param value Playback speed.\n */\n public setSpeed(value = 1): void {\n if (!this._lottie) {\n return;\n }\n\n this._lottie.setSpeed(value);\n }\n\n /**\n * Animation play direction.\n *\n * @param value Direction values.\n */\n public setDirection(value: number): void {\n if (!this._lottie) {\n return;\n }\n\n this._lottie.setDirection(value);\n }\n\n /**\n * Sets the looping of the animation.\n *\n * @param value Whether to enable looping. Boolean true enables looping.\n */\n public setLooping(value: boolean): void {\n if (this._lottie) {\n this.loop = value;\n this._lottie.loop = value;\n }\n }\n\n /**\n * Toggle playing state.\n */\n public togglePlay(): void {\n return this.currentState === PlayerState.Playing\n ? this.pause()\n : this.play();\n }\n\n /**\n * Toggles animation looping.\n */\n public toggleLooping(): void {\n this.setLooping(!this.loop);\n }\n\n /**\n * Resize animation.\n */\n public resize() {\n if (!this._lottie) {\n return;\n }\n\n this._lottie.resize();\n }\n\n /**\n * Returns the styles for the component.\n */\n static get styles() {\n return styles;\n }\n\n /**\n * Cleanup on component destroy.\n */\n public disconnectedCallback(): void {\n // Don't clean up if node is still connected to the context (i.e. this is a move).\n if (this.isConnected) return;\n\n // Remove intersection observer for detecting component being out-of-view.\n if (this._io) {\n this._io.disconnect();\n this._io = undefined;\n }\n\n // Remove resize observer for detecting resize/reflow events affecting element.\n // if (this._ro) {\n // this._ro.disconnect();\n // this._ro = undefined;\n // }\n\n // Remove the attached Visibility API's change event listener.\n document.removeEventListener(\"visibilitychange\", () =>\n this._onVisibilityChange()\n );\n\n // Destroy the animation instance and element\n this.destroy();\n }\n\n public render(): TemplateResult | void {\n const className: string = this.controls ? \"main controls\" : \"main\";\n const animationClass: string = this.controls\n ? \"animation controls\"\n : \"animation\";\n\n return html` <div\n id=\"animation-container\"\n class=${className}\n lang=\"en\"\n aria-label=${this.description}\n role=\"img\"\n >\n <div\n id=\"animation\"\n class=${animationClass}\n style=\"background:${this.background};\"\n >\n ${this.currentState === PlayerState.Error\n ? html`<div class=\"error\">⚠️</div>`\n : undefined}\n </div>\n ${this.controls && !this.disableShadowDOM\n ? this.renderControls()\n : undefined}\n </div>`;\n }\n\n protected createRenderRoot(): Element | ShadowRoot {\n if (this.disableShadowDOM) this.style.display = \"block\";\n\n return this.disableShadowDOM ? this : super.createRenderRoot();\n }\n\n /**\n * Initialize everything on component first render.\n */\n protected firstUpdated(): void {\n // Add intersection observer for detecting component being out-of-view.\n if (\"IntersectionObserver\" in window) {\n this._io = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n if (entries[0].isIntersecting) {\n if (this.currentState === PlayerState.Frozen) {\n this.play();\n }\n } else if (this.currentState === PlayerState.Playing) {\n this.freeze();\n }\n }\n );\n\n this._io.observe(this.container);\n }\n\n // Add listener for Visibility API's change event.\n if (typeof document.hidden !== \"undefined\") {\n document.addEventListener(\"visibilitychange\", () =>\n this._onVisibilityChange()\n );\n }\n\n // Setup lottie player\n if (this.src) {\n this.load(this.src);\n }\n this.dispatchEvent(new CustomEvent(PlayerEvents.Rendered));\n }\n\n protected renderControls(): TemplateResult {\n const isPlaying: boolean = this.currentState === PlayerState.Playing;\n const isPaused: boolean = this.currentState === PlayerState.Paused;\n const isStopped: boolean = this.currentState === PlayerState.Stopped;\n\n return html`\n <div\n id=\"lottie-controls\"\n aria-label=\"lottie-animation-controls\"\n class=\"toolbar\"\n >\n <button\n id=\"lottie-play-button\"\n @click=${this.togglePlay}\n class=${isPlaying || isPaused ? \"active\" : \"\"}\n style=\"align-items:center;\"\n tabindex=\"0\"\n aria-label=\"play-pause\"\n >\n ${isPlaying\n ? html`<svg\n width=\"24\"\n height=\"24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M14.016 5.016H18v13.969h-3.984V5.016zM6 18.984V5.015h3.984v13.969H6z\"\n />\n </svg>`\n : html`<svg\n width=\"24\"\n height=\"24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M8.016 5.016L18.985 12 8.016 18.984V5.015z\" />\n </svg>`}\n </button>\n <button\n id=\"lottie-stop-button\"\n @click=${this.stop}\n class=${isStopped ? \"active\" : \"\"}\n style=\"align-items:center;\"\n tabindex=\"0\"\n aria-label=\"stop\"\n >\n <svg width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M6 6h12v12H6V6z\" />\n </svg>\n </button>\n <input\n id=\"lottie-seeker-input\"\n class=\"seeker\"\n type=\"range\"\n min=\"0\"\n step=\"1\"\n max=\"100\"\n .value=${this.seeker}\n @input=${this._handleSeekChange}\n @mousedown=${() => {\n this._prevState = this.currentState;\n this.freeze();\n }}\n @mouseup=${() => {\n this._prevState === PlayerState.Playing && this.play();\n }}\n aria-valuemin=\"1\"\n aria-valuemax=\"100\"\n role=\"slider\"\n aria-valuenow=${this.seeker}\n tabindex=\"0\"\n aria-label=\"lottie-seek-input\"\n />\n <button\n id=\"lottie-loop-toggle\"\n @click=${this.toggleLooping}\n class=${this.loop ? \"active\" : \"\"}\n style=\"align-items:center;\"\n tabindex=\"0\"\n aria-label=\"loop-toggle\"\n >\n <svg width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M17.016 17.016v-4.031h1.969v6h-12v3l-3.984-3.984 3.984-3.984v3h10.031zM6.984 6.984v4.031H5.015v-6h12v-3l3.984 3.984-3.984 3.984v-3H6.984z\"\n />\n </svg>\n </button>\n </div>\n `;\n }\n\n /**\n * Handle visibility change events.\n */\n private _onVisibilityChange(): void {\n if (document.hidden === true && this.currentState === PlayerState.Playing) {\n this.freeze();\n } else if (this.currentState === PlayerState.Frozen) {\n this.play();\n }\n }\n\n /**\n * Handles click and drag actions on the progress track.\n */\n private _handleSeekChange(e: any): void {\n if (!this._lottie || isNaN(e.target.value)) {\n return;\n }\n\n const frame: number = (e.target.value / 100) * this._lottie.totalFrames;\n\n this.seek(frame);\n }\n\n private _attachEventListeners(): void {\n this._lottie.addEventListener(\"enterFrame\", () => {\n this.seeker =\n (this._lottie.currentFrame / this._lottie.totalFrames) * 100;\n\n this.dispatchEvent(\n new CustomEvent(PlayerEvents.Frame, {\n detail: {\n frame: this._lottie.currentFrame,\n seeker: this.seeker,\n },\n })\n );\n });\n\n // Handle animation play complete\n this._lottie.addEventListener(\"complete\", () => {\n if (this.currentState !== PlayerState.Playing) {\n this.dispatchEvent(new CustomEvent(PlayerEvents.Complete));\n\n return;\n }\n\n if (!this.loop || (this.count && this._counter >= this.count)) {\n this.dispatchEvent(new CustomEvent(PlayerEvents.Complete));\n\n if (this.mode === PlayMode.Bounce) {\n if (this._lottie.currentFrame === 0) {\n return;\n }\n } else {\n return;\n }\n }\n\n if (this.mode === PlayMode.Bounce) {\n if (this.count) {\n this._counter += 0.5;\n }\n\n setTimeout(() => {\n this.dispatchEvent(new CustomEvent(PlayerEvents.Loop));\n\n if (this.currentState === PlayerState.Playing) {\n this._lottie.setDirection(this._lottie.playDirection * -1);\n this._lottie.play();\n }\n }, this.intermission);\n } else {\n if (this.count) {\n this._counter += 1;\n }\n\n window.setTimeout(() => {\n this.dispatchEvent(new CustomEvent(PlayerEvents.Loop));\n\n if (this.currentState === PlayerState.Playing) {\n if (this.direction === -1) {\n // Prevents flickering\n this.seek(\"99%\");\n this.play();\n } else {\n this._lottie.stop();\n this._lottie.play();\n }\n }\n }, this.intermission);\n }\n });\n\n // Handle lottie-web ready event\n this._lottie.addEventListener(\"DOMLoaded\", () => {\n // Set initial playback speed and direction\n this.setSpeed(this.speed);\n this.setDirection(this.direction);\n\n // Start playing if autoplay is enabled\n if (this.autoplay) {\n if (this.direction === -1) this.seek(\"100%\");\n this.play();\n }\n\n this.dispatchEvent(new CustomEvent(PlayerEvents.Ready));\n });\n\n // Handle animation data load complete\n this._lottie.addEventListener(\"data_ready\", () => {\n this.dispatchEvent(new CustomEvent(PlayerEvents.Load));\n });\n\n // Set error state when animation load fail event triggers\n this._lottie.addEventListener(\"data_failed\", () => {\n this.currentState = PlayerState.Error;\n\n this.dispatchEvent(new CustomEvent(PlayerEvents.Error));\n });\n\n // Set handlers to auto play animation on hover if enabled\n this.container.addEventListener(\"mouseenter\", () => {\n if (this.hover && this.currentState !== PlayerState.Playing) {\n this.play();\n }\n });\n this.container.addEventListener(\"mouseleave\", () => {\n if (this.hover && this.currentState === PlayerState.Playing) {\n this.stop();\n }\n });\n }\n\n /**\n * Freeze animation play.\n * This internal state pauses animation and is used to differentiate between\n * user requested pauses and component instigated pauses.\n */\n private freeze(): void {\n if (!this._lottie) {\n return;\n }\n\n this._lottie.pause();\n this.currentState = PlayerState.Frozen;\n\n this.dispatchEvent(new CustomEvent(PlayerEvents.Freeze));\n }\n}\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","pop","push","__createBinding","o","m","k","k2","undefined","enumerable","get","__exportStar","__values","__read","ar","error","__spread","concat","__spreadArrays","il","a","j","jl","__spreadArray","to","from","pack","l","slice","__await","__asyncGenerator","asyncIterator","q","resume","fulfill","settle","shift","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","mod","__esModule","__importDefault","default","__classPrivateFieldGet","receiver","state","kind","has","__classPrivateFieldSet","set","supportsAdoptingStyleSheets","window","ShadowRoot","ShadyCSS","nativeShadow","Document","CSSStyleSheet","constructionToken","styleSheetCache","Map","CSSResult","cssText","safeToken","_$cssResult$","Error","styleSheet","replaceSync","toString","unsafeCSS","css","strings","values","reduce","acc","idx","adoptStyles","renderRoot","styles","adoptedStyleSheets","map","forEach","style","document","createElement","nonce","litNonce","setAttribute","textContent","appendChild","getCompatibleStyle","sheet","rule","cssRules","trustedTypes","emptyStringForBooleanAttribute","emptyScript","polyfillSupport","reactiveElementPolyfillSupport","defaultConverter","toAttribute","type","Boolean","JSON","stringify","fromAttribute","fromValue","Number","parse","notEqual","old","defaultPropertyDeclaration","attribute","converter","reflect","hasChanged","ReactiveElement","HTMLElement","_initialize","initializer","_initializers","observedAttributes","finalize","attributes","elementProperties","attr","__attributeNameForProperty","__attributeToPropertyMap","name","options","noAccessor","descriptor","getPropertyDescriptor","oldValue","requestUpdate","configurable","finalized","superCtor","getPrototypeOf","props","properties","propKeys","getOwnPropertyNames","createProperty","elementStyles","finalizeStyles","isArray","Set","flat","Infinity","reverse","unshift","toLowerCase","__updatePromise","res","enableUpdating","_$changedProperties","__saveInstanceProperties","addController","controller","__controllers","isConnected","hostConnected","removeController","splice","_v","__instanceProperties","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","connectedCallback","_requestedUpdate","disconnectedCallback","hostDisconnected","attributeChangedCallback","_old","_$attributeToProperty","__propertyToAttribute","attrValue","__reflectingProperty","removeAttribute","ctor","propName","getPropertyOptions","shouldRequestUpdate","__reflectingProperties","isUpdatePending","__enqueueUpdate","async","scheduleUpdate","performUpdate","hasUpdated","shouldUpdate","changedProperties","willUpdate","hostUpdate","update","__markUpdated","_$didUpdate","_changedProperties","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","mode","globalThis","reactiveElementVersions","policy","createPolicy","createHTML","marker","Math","random","markerMatch","nodeMarker","createMarker","createComment","isPrimitive","isIterable","textEndRegex","commentEndRegex","comment2EndRegex","tagEndRegex","singleQuoteAttrEndRegex","doubleQuoteAttrEndRegex","rawTextElement","tag","_$litType$","html","svg","noChange","for","nothing","templateCache","WeakMap","render","container","partOwnerNode","renderBefore","part","_$litPart$","endNode","ChildPart","insertBefore","_$setValue","walker","createTreeWalker","getTemplateHtml","rawTextEndRegex","attrNames","regex","attrName","match","attrNameEndIndex","lastIndex","exec","test","RegExp","end","startsWith","htmlResult","Template","node","nodeIndex","attrNameIndex","partCount","parts","el","currentNode","content","svgElement","firstChild","remove","append","childNodes","nextNode","nodeType","hasAttributes","attrsToRemove","getAttributeNames","endsWith","realName","statics","getAttribute","split","index","PropertyPart","BooleanAttributePart","EventPart","AttributePart","tagName","data","_options","innerHTML","resolveDirective","attributeIndex","parent","currentDirective","__directives","__directive","nextDirectiveConstructor","_$litDirective$","_$AO","_$initialize","_$resolve","TemplateInstance","template","_$template","_$parent","parentNode","_$isConnected","_clone","fragment","creationScope","importNode","partIndex","templatePart","nextSibling","ElementPart","_parts","_update","startNode","_$startNode","_$endNode","__isConnected","_$committedValue","_$clear","_commitText","_commitTemplateResult","_commitNode","_commitIterable","_insert","ref","createTextNode","_$getTemplate","h","instance","itemPart","itemParts","item","start","_$notifyConnectionChanged","setConnected","element","fill","directiveParent","valueIndex","noCommit","change","_commitValue","newListener","oldListener","shouldRemoveListener","capture","once","passive","shouldAddListener","removeEventListener","addEventListener","handleEvent","event","host","_$LH","_boundAttributeSuffix","_marker","_markerMatch","_HTML_RESULT","_getTemplateHtml","_TemplateInstance","_isIterable","_resolveDirective","_ChildPart","_AttributePart","_BooleanAttributePart","_EventPart","_PropertyPart","_ElementPart","litHtmlPolyfillSupport","litHtmlVersions","UpdatingElement","LitElement","super","renderOptions","__childPart","_$litElement$","litElementHydrateSupport","litElementPolyfillSupport","_$LE","litElementVersions","customElement","classOrDescriptor","clazz","customElements","define","elements","finisher","standardProperty","placement","originalKey","property","protoOrDescriptor","proto","legacyPrototypeMethod","standardPrototypeMethod","decorateProperty","_ref","info","eventOptions","query","selector","cache","querySelector","queryAll","_name","querySelectorAll","queryAsync","slotAssignedElements","HTMLSlotElement","assignedElements","slot","opts","assignedNodes","filter","Node","ELEMENT_NODE","queryAssignedElements","slotSelector","slotEl","matches","queryAssignedNodes","slotOrOptions","flatten","assignedNodesOptions","factory","navigator","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sources","destination","sourcePrototype","len","getDescriptor","object","prop","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","setRate","rateValue","createAudio","assetPath","Howl","src","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","Uint8ClampedArray","Float32Array","Int16Array","createSizedArray","_typeof$6","obj","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","userAgent","_shouldRoundValues","bmPow","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","max","bmMin","min","BMMath","ProjectInterface$1","propertyNames","abs","val","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","round","styleDiv","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","RGBtoHSV","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","_workerSelf","setupWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","createWorker","completeLayers","layers","comps","layerData","jLen","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","id","comp","findComp","__used","ks","it","checkVersion","minimum","animVersionString","animVersion","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","chars","charData","ip","st","sr","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","checkShapes","completeClosingShapes","closed","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","response","responseText","load","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","join","send","completeData","payload","animation","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","width","height","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","bind","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","destroy","getAsset","createImgData","crossOrigin","createImageData","setAttributeNS","_elementHelper","setCacheType","elementHelper","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","markerParser","parsePayloadLines","line","lines","keys","keysCount","trim","_markers","markers","markerData","time","tm","duration","dr","cm","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","loop","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","parseInt","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","setTimeout","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","goToAndStop","isFrame","numValue","isNaN","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","hide","show","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","getElementsByClassName","lenAnims","getElementsByTagName","innerText","div","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","str","replace","beziers","bezEasing","BezierEasing","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","x","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","double","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","point","lastPoint","lengthData","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","out","ax","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","c1","cos","c2","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","lottie","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","exports","bodymovin","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","delta","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","t2","box","boundingBox","cx","cy","splitData","boxIntersect","intersectsImpl","depth","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","setPoint","outputBezier","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","getProjectingAngle","cur","prevIndex","nextIndex","pVector","zigZagCorner","frequency","pointType","prevPoint","nextPoint","prevDist","nextDist","zigZagSegment","dist","normalAngle","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","tangentAngle","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","right","mid","flex","inflectionPoints","OffsetPathModifier","getFontProperties","fontData","fStyle","fWeight","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","resetElements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","derivative","denom","tcusp","square","root","p10","p11","p20","p21","bounds","bottom","other","shapeSegmentInverted","pointsType","count","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","emptyChar","w","size","combinedCharacters","BLACK_FLAG_CODE_POINT","surrogateModifiers","setUpNode","font","family","fontFamily","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","familyArray","enabledFamilies","trimFontOptions","createHelper","def","helper","engine","fontProps","tHelper","fFamily","fClass","tCanvasHelper","OffscreenCanvas","measureText","text","getComputedTextLength","getCodePoint","string","codePoint","charCodeAt","second","isRegionalCode","Font","typekitLoaded","_warned","Date","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","isVariationSelector","fontPrototype","found","ch","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","rel","sc","getCharData","_char","console","warn","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","removeChild","SlotManager","slotFactory","RenderableElement","slots","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","BaseElement","FrameElement","FootageElement","imageLoader","initBaseData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","eff","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","FootageInterface","getFootageData","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","pendingElements","getElementById","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","rect","expansor","feMorph","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","renderLocalTransform","localTransforms","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","filterManager","source","createFilter","filters","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ms","ost","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","charAt","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","add","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","ariaLabel","title","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","runExpressions","destroyed","ShapeTransformManager","sequences","sequenceList","transform_key_count","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","setElements","getElements","destroyElements","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","loadLuma","_svg","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","operationsMap","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","CVTextElement","stroke","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","CanvasContext","strokeStyle","lineCap","CVContextData","stack","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","CVCompElement","CanvasRenderer","clearCanvas","context","dpr","devicePixelRatio","currentGlobalAlpha","contextData","ctxTransform","ctxOpacity","ctxFillStyle","ctxStrokeStyle","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFill","ctxFillRect","ctxStroke","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","createElements","buffers","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearRect","prepareLayer","bufferCtx","drawImage","getTransform","exitLayer","buffer","forceRealStack","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","grd","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","globalAlpha","actionFlag","containerStyle","mozTransformOrigin","setContext","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","fillType","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","cWidth","cHeight","floatingContainer","_createBaseContainerElements","_thisLayerFunction","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","global","startdenom","significance","ARC4","keylen","me","S","copy","typ","mixkey","seed","smear","stringseed","tostring","shortseed","entropy","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","autoseed","arc4","prng","int32","quick","pass","is_math_call","initialize$2","propTypes","SHAPE","_typeof$1","ExpressionManager","fetch","frames","_lottieGlobal","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","noOp","_value","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","_masksInterfaces","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","anchorPointDescriptor","defineProperties","anchor_point","startTime","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","effectsData","createGroupInterface","groupInterface","mn","_propertyGroup","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","ShapePathInterface","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","_sourceText","sourceText","stringValue","fillColor","_typeof","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","speed","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","colorBlack","colorWhite","groupPath","elemChildren","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","TransformEffect","SVGTransformEffect","CVTransformEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","module","LOTTIE_PLAYER_VERSION","LOTTIE_WEB_VERSION","PlayerState","PlayMode","PlayerEvents","parseSrc","isLottie","json","every","field","fromURL","srcUrl","LottiePlayer","Loading","Normal","_this","srcParsed","jsonData","srcAttrib","_lottie","webworkers","_attachEventListeners","disableCheck","currentState","dispatchEvent","CustomEvent","getLottie","getVersions","lottieWebVersion","lottiePlayerVersion","Playing","Play","Paused","Pause","_counter","Stopped","Stop","Destroyed","frame","seeker","snapshot","download","XMLSerializer","serializeToString","encodeURIComponent","click","setLooping","togglePlay","toggleLooping","_io","disconnect","_onVisibilityChange","controls","animationClass","background","disableShadowDOM","renderControls","IntersectionObserver","entries","isIntersecting","Frozen","observe","Rendered","isStopped","_handleSeekChange","_prevState","Frame","detail","Complete","Bounce","Loop","intermission","Ready","Load","hover","Freeze"],"mappings":"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"}