{"version":3,"file":"tema-85b0ff4331da0c3ed7b2.esm.js","mappings":"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","sources":["webpack://dh-avslort/./node_modules/@nrk/dh-server-libs/base-element.js","webpack://dh-avslort/./node_modules/@nrk/dh-server-libs/src/base-element.js","webpack://dh-avslort/./node_modules/@nrk/dh-server-libs/src/get-context-id.js","webpack://dh-avslort/./src/tema/components/marker.module.css?eb2d","webpack://dh-avslort/./src/tema/components/fokus.module.css?d8a5","webpack://dh-avslort/./src/tema/components/titles.module.css?2c7f","webpack://dh-avslort/./src/tema/components/progress-tracker.js","webpack://dh-avslort/./src/tema/components/progress.module.css?b0df","webpack://dh-avslort/../src/multiply-matrices.js","webpack://dh-avslort/../src/util.js","webpack://dh-avslort/../src/hooks.js","webpack://dh-avslort/../src/defaults.js","webpack://dh-avslort/../src/adapt.js","webpack://dh-avslort/../src/space.js","webpack://dh-avslort/../src/spaces/xyz-d65.js","webpack://dh-avslort/../src/rgbspace.js","webpack://dh-avslort/../src/parse.js","webpack://dh-avslort/../src/getColor.js","webpack://dh-avslort/../src/getAll.js","webpack://dh-avslort/../src/get.js","webpack://dh-avslort/../src/setAll.js","webpack://dh-avslort/../src/set.js","webpack://dh-avslort/../src/spaces/xyz-d50.js","webpack://dh-avslort/../src/spaces/lab.js","webpack://dh-avslort/../src/angles.js","webpack://dh-avslort/../src/spaces/lch.js","webpack://dh-avslort/../src/deltaE/deltaE2000.js","webpack://dh-avslort/../src/inGamut.js","webpack://dh-avslort/../src/clone.js","webpack://dh-avslort/../src/toGamut.js","webpack://dh-avslort/../src/to.js","webpack://dh-avslort/../src/serialize.js","webpack://dh-avslort/../src/spaces/rec2020-linear.js","webpack://dh-avslort/../src/spaces/rec2020.js","webpack://dh-avslort/../src/spaces/p3-linear.js","webpack://dh-avslort/../src/spaces/srgb-linear.js","webpack://dh-avslort/../src/keywords.js","webpack://dh-avslort/../src/spaces/srgb.js","webpack://dh-avslort/../src/spaces/p3.js","webpack://dh-avslort/../src/display.js","webpack://dh-avslort/../src/distance.js","webpack://dh-avslort/../src/luminance.js","webpack://dh-avslort/../src/contrast/APCA.js","webpack://dh-avslort/../src/contrast/WCAG21.js","webpack://dh-avslort/../src/contrast/Michelson.js","webpack://dh-avslort/../src/contrast/Weber.js","webpack://dh-avslort/../src/contrast/Lstar.js","webpack://dh-avslort/../src/chromaticity.js","webpack://dh-avslort/../src/deltaE/deltaECMC.js","webpack://dh-avslort/../src/spaces/xyz-abs-d65.js","webpack://dh-avslort/../src/spaces/jzazbz.js","webpack://dh-avslort/../src/spaces/jzczhz.js","webpack://dh-avslort/../src/spaces/ictcp.js","webpack://dh-avslort/../src/spaces/oklab.js","webpack://dh-avslort/../src/deltaE/deltaE76.js","webpack://dh-avslort/../src/deltaE/deltaEJz.js","webpack://dh-avslort/../src/deltaE/deltaEITP.js","webpack://dh-avslort/../src/deltaE/deltaEOK.js","webpack://dh-avslort/../src/deltaE.js","webpack://dh-avslort/../src/variations.js","webpack://dh-avslort/../src/interpolation.js","webpack://dh-avslort/../src/spaces/hsl.js","webpack://dh-avslort/../src/spaces/hsv.js","webpack://dh-avslort/../src/spaces/hwb.js","webpack://dh-avslort/../src/spaces/a98rgb-linear.js","webpack://dh-avslort/../src/spaces/a98rgb.js","webpack://dh-avslort/../src/spaces/prophoto-linear.js","webpack://dh-avslort/../src/spaces/prophoto.js","webpack://dh-avslort/../src/spaces/oklch.js","webpack://dh-avslort/../src/spaces/rec2100-pq.js","webpack://dh-avslort/../src/spaces/rec2100-hlg.js","webpack://dh-avslort/../src/CATs.js","webpack://dh-avslort/../src/spaces/acescg.js","webpack://dh-avslort/../src/spaces/acescc.js","webpack://dh-avslort/../src/color.js","webpack://dh-avslort/../src/equals.js","webpack://dh-avslort/../src/spaces/index.js","webpack://dh-avslort/../src/space-accessors.js","webpack://dh-avslort/../src/index.js","webpack://dh-avslort/../src/contrast.js","webpack://dh-avslort/./src/tema/components/progress-player.js","webpack://dh-avslort/./src/tema/components/hydrate.js","webpack://dh-avslort/./src/tema/components/marker.js","webpack://dh-avslort/./src/tema/components/fokus.js","webpack://dh-avslort/./src/tema/components/titles.js","webpack://dh-avslort/./src/tema/components/progress.js","webpack://dh-avslort/./src/tema/client.ts","webpack://dh-avslort/./src/lib/get-element-tag.ts","webpack://dh-avslort/./node_modules/fast-clone/index.js","webpack://dh-avslort/./node_modules/lottie-api/dist/lottie_api.js","webpack://dh-avslort/./node_modules/lottie-web/build/player/lottie.js","webpack://dh-avslort/webpack/bootstrap","webpack://dh-avslort/webpack/runtime/create fake namespace object","webpack://dh-avslort/webpack/runtime/import chunk loading","webpack://dh-avslort/webpack/runtime/amd options","webpack://dh-avslort/webpack/runtime/compat get default export","webpack://dh-avslort/webpack/runtime/define property getters","webpack://dh-avslort/webpack/runtime/ensure chunk","webpack://dh-avslort/webpack/runtime/get javascript chunk filename","webpack://dh-avslort/webpack/runtime/get mini-css chunk filename","webpack://dh-avslort/webpack/runtime/hasOwnProperty shorthand","webpack://dh-avslort/webpack/runtime/make namespace object","webpack://dh-avslort/webpack/runtime/node module decorator","webpack://dh-avslort/webpack/runtime/publicPath","webpack://dh-avslort/webpack/startup"],"sourcesContent":["module.exports = require('./src/base-element.js')\n","const { getContextId } = require('./get-context-id')\n\nlet _coreAnalyticsPromise = undefined\nfunction getCoreAnalytics() {\n if (!_coreAnalyticsPromise) {\n if ('coreAnalytics' in window) {\n _coreAnalyticsPromise = Promise.resolve(window['coreAnalytics'])\n } else {\n _coreAnalyticsPromise = import('@nrk/core-analytics' /* webpackChunkName: \"ca\" */).then(\n (m) => m.default\n )\n }\n }\n return _coreAnalyticsPromise\n}\n\nclass BaseElement extends HTMLElement {\n constructor() {\n super()\n this.sendError = this.sendError.bind(this)\n this.sendGaEvent = this.sendGaEvent.bind(this)\n }\n connectedCallback() {\n if (!this.name) throw Error('Name not provided')\n this.setupTracker()\n if (typeof this.render === 'function') this.render()\n }\n\n setupTracker() {\n this.coreAnalyticsTracker = new Promise((resolve) => {\n getCoreAnalytics().then((coreAnalytics) => {\n const tracker = coreAnalytics.create()\n\n tracker('initialize', {\n container: this,\n parentId: this.metadata.parentId || getContextId(window.location.href),\n ga: this.dataset.gaPropertyId,\n })\n\n tracker('context', {\n title: this.metadata.title,\n contentId: this.metadata.selfId,\n publishDate: this.metadata.published,\n })\n\n resolve(tracker)\n })\n })\n }\n\n async sendError(message) {\n // error reporter has been removed\n }\n\n async sendGaEvent(event) {\n const tracker = await this.coreAnalyticsTracker\n tracker('event', {\n ga: {\n eventCategory: `dh-modul-${this.name}`,\n ...event,\n },\n })\n }\n\n get metadata() {\n return this.dataset.metadata ? JSON.parse(this.dataset.metadata) : {}\n }\n\n get preloadedState() {\n return this.dataset.preloadedState ? JSON.parse(this.dataset.preloadedState) : null\n }\n\n get errorTracking() {\n return {\n url: '',\n enabled: false,\n }\n }\n}\n\nmodule.exports.BaseElement = BaseElement\n","const POLOPOLY_ID_REGEX = /[1-9]{1,2}\\.\\d+/g\n\nfunction extractPolopolyIdFromString(str) {\n const matches = str.match(POLOPOLY_ID_REGEX)\n if (matches && matches.length) {\n return matches[0]\n }\n return null\n}\n\nfunction getContextId(url) {\n return extractPolopolyIdFromString(url)\n}\n\nmodule.exports.getContextId = getContextId\n","// extracted by mini-css-extract-plugin\nexport default {\"visible\":\"dh-avslort-v1-visible-sfmYM\"};","// extracted by mini-css-extract-plugin\nexport default {\"visible\":\"dh-avslort-v1-visible-jtzn5\"};","// extracted by mini-css-extract-plugin\nexport default {\"visible\":\"dh-avslort-v1-visible-FX94G\",\"subtitle-in\":\"dh-avslort-v1-subtitle-in-Knseh\",\"subtitleIn\":\"dh-avslort-v1-subtitle-in-Knseh\"};","export function trackProgress() {\n let articleStart = getArticleStart()\n let articleEnd = getArticleEnd()\n let outroStart = getOutroStart()\n const resizeListener = () => {\n articleStart = getArticleStart()\n articleEnd = getArticleEnd()\n outroStart = getOutroStart()\n }\n window.addEventListener('resize', resizeListener)\n\n return {\n beforeArticleStart() {\n return document.scrollingElement.scrollTop < articleStart\n },\n afterArticleStart() {\n return document.scrollingElement.scrollTop > articleStart\n },\n beforeArticleEnd() {\n return document.scrollingElement.scrollTop < articleEnd\n },\n passedOutroStart() {\n return document.scrollingElement.scrollTop > outroStart\n },\n calculateArticleProgress() {\n return calculateProgress(document.scrollingElement.scrollTop, articleStart, articleEnd)\n },\n disconnect() {\n window.removeEventListener('resize', resizeListener)\n },\n }\n}\n\nfunction getArticleStart() {\n const startElement = document.querySelector('[data-progress-start]')\n if (!startElement) {\n return 0\n }\n const startBCR = startElement?.getBoundingClientRect()\n const position = startElement.getAttribute('data-progress-start')\n const edge = position === 'before' ? 'top' : 'bottom'\n const titleBottom = startBCR[edge] + document.scrollingElement.scrollTop\n return Math.max(0, titleBottom)\n}\n\nfunction getArticleEnd() {\n const heiboksElement = document.querySelector('dh-avslort-heiboks-v1')\n if (!heiboksElement) {\n return document.scrollingElement.scrollHeight - document.documentElement.clientHeight\n }\n return heiboksElement.getBoundingClientRect().top + document.scrollingElement.scrollTop - 30\n}\n\nfunction getOutroStart() {\n const heiboksElement = document.querySelector('dh-avslort-heiboks-v1')\n if (!heiboksElement) {\n return document.scrollingElement.scrollHeight - document.documentElement.clientHeight\n }\n return heiboksElement.getBoundingClientRect().bottom + document.scrollingElement.scrollTop\n}\n\nfunction calculateProgress(current, start, end) {\n return Math.min(Math.max(0, (current - start) / (end - start)), 1)\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"progress-grid\":\"dh-avslort-v1-progress-grid-j2c3L\",\"progressGrid\":\"dh-avslort-v1-progress-grid-j2c3L\",\"progress-container\":\"dh-avslort-v1-progress-container-W2jI3\",\"progressContainer\":\"dh-avslort-v1-progress-container-W2jI3\"};","// A is m x n. B is n x p. product is m x p.\nexport default function multiplyMatrices(A, B) {\n\tlet m = A.length;\n\n\tif (!Array.isArray(A[0])) {\n\t\t// A is vector, convert to [[a, b, c, ...]]\n\t\tA = [A];\n\t}\n\n\tif (!Array.isArray(B[0])) {\n\t\t// B is vector, convert to [[a], [b], [c], ...]]\n\t\tB = B.map(x => [x]);\n\t}\n\n\tlet p = B[0].length;\n\tlet B_cols = B[0].map((_, i) => B.map(x => x[i])); // transpose B\n\tlet product = A.map(row => B_cols.map(col => {\n\t\tlet ret = 0;\n\n\t\tif (!Array.isArray(row)) {\n\t\t\tfor (let c of col) {\n\t\t\t\tret += row * c;\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tfor (let i=0; i < row.length; i++) {\n\t\t\tret += row[i] * (col[i] || 0);\n\t\t}\n\n\t\treturn ret;\n\t}));\n\n\tif (m === 1) {\n\t\tproduct = product[0]; // Avoid [[a, b, c, ...]]\n\t}\n\n\tif (p === 1) {\n\t\treturn product.map(x => x[0]); // Avoid [[a], [b], [c], ...]]\n\t}\n\n\treturn product;\n}\n","/**\n * Various utility functions\n */\n\nexport {default as multiplyMatrices} from \"./multiply-matrices.js\";\n\n/**\n * Check if a value is a string (including a String object)\n * @param {*} str - Value to check\n * @returns {boolean}\n */\nexport function isString (str) {\n\treturn type(str) === \"string\";\n}\n\n/**\n * Determine the internal JavaScript [[Class]] of an object.\n * @param {*} o - Value to check\n * @returns {string}\n */\nexport function type (o) {\n\tlet str = Object.prototype.toString.call(o);\n\n\treturn (str.match(/^\\[object\\s+(.*?)\\]$/)[1] || \"\").toLowerCase();\n}\n\n/**\n * Round a number to a certain number of significant digits\n * @param {number} n - The number to round\n * @param {number} precision - Number of significant digits\n */\nexport function toPrecision(n, precision) {\n\tn = +n;\n\tprecision = +precision;\n\tlet integerLength = (Math.floor(n) + \"\").length;\n\n\tif (precision > integerLength) {\n\t\treturn +n.toFixed(precision - integerLength);\n\t}\n\telse {\n\t\tlet p10 = 10 ** (integerLength - precision);\n\t\treturn Math.round(n / p10) * p10;\n\t}\n}\n\n/**\n* Parse a CSS function, regardless of its name and arguments\n* @param String str String to parse\n* @return {{name, args, rawArgs}}\n*/\nexport function parseFunction (str) {\n\tif (!str) {\n\t\treturn;\n\t}\n\n\tstr = str.trim();\n\n\tconst isFunctionRegex = /^([a-z]+)\\((.+?)\\)$/i;\n\tconst isNumberRegex = /^-?[\\d.]+$/;\n\tlet parts = str.match(isFunctionRegex);\n\n\tif (parts) {\n\t\t// It is a function, parse args\n\t\tlet args = [];\n\t\tparts[2].replace(/\\/?\\s*([-\\w.]+(?:%|deg)?)/g, ($0, arg) => {\n\t\t\tif (/%$/.test(arg)) {\n\t\t\t\t// Convert percentages to 0-1 numbers\n\t\t\t\targ = new Number(arg.slice(0, -1) / 100);\n\t\t\t\targ.type = \"\";\n\t\t\t}\n\t\t\telse if (/deg$/.test(arg)) {\n\t\t\t\t// Drop deg from degrees and convert to number\n\t\t\t\t// TODO handle other units too\n\t\t\t\targ = new Number(+arg.slice(0, -3));\n\t\t\t\targ.type = \"\";\n\t\t\t\targ.unit = \"deg\";\n\t\t\t}\n\t\t\telse if (isNumberRegex.test(arg)) {\n\t\t\t\t// Convert numerical args to numbers\n\t\t\t\targ = new Number(arg);\n\t\t\t\targ.type = \"\";\n\t\t\t}\n\n\t\t\tif ($0.startsWith(\"/\")) {\n\t\t\t\t// It's alpha\n\t\t\t\targ = arg instanceof Number? arg : new Number(arg);\n\t\t\t\targ.alpha = true;\n\t\t\t}\n\n\t\t\targs.push(arg);\n\t\t});\n\n\t\treturn {\n\t\t\tname: parts[1].toLowerCase(),\n\t\t\trawName: parts[1],\n\t\t\trawArgs: parts[2],\n\t\t\t// An argument could be (as of css-color-4):\n\t\t\t// a number, percentage, degrees (hue), ident (in color())\n\t\t\targs\n\t\t};\n\t}\n}\n\nexport function last(arr) {\n\treturn arr[arr.length - 1];\n}\n\nexport function interpolate (start, end, p) {\n\tif (isNaN(start)) {\n\t\treturn end;\n\t}\n\n\tif (isNaN(end)) {\n\t\treturn start;\n\t}\n\n\treturn start + (end - start) * p;\n}\n\nexport function interpolateInv (start, end, value) {\n\treturn (value - start) / (end - start);\n}\n\nexport function mapRange(from, to, value) {\n\treturn interpolate(to[0], to[1], interpolateInv(from[0], from[1], value));\n}\n\nexport function parseCoordGrammar (coordGrammars) {\n\treturn coordGrammars.map(coordGrammar => {\n\t\treturn coordGrammar.split(\"|\").map(type => {\n\t\t\ttype = type.trim();\n\t\t\tlet range = type.match(/^(<[a-z]+>)\\[(-?[.\\d]+),\\s*(-?[.\\d]+)\\]?$/);\n\n\t\t\tif (range) {\n\t\t\t\tlet ret = new String(range[1]);\n\t\t\t\tret.range = [+range[2], +range[3]];\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn type;\n\t\t});\n\t});\n}","/**\n * A class for adding deep extensibility to any piece of JS code\n */\nexport class Hooks {\n\tadd (name, callback, first) {\n\t\tif (typeof arguments[0] != \"string\") {\n\t\t\t// Multiple hooks\n\t\t\tfor (var name in arguments[0]) {\n\t\t\t\tthis.add(name, arguments[0][name], arguments[1]);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t(Array.isArray(name)? name : [name]).forEach(function(name) {\n\t\t\tthis[name] = this[name] || [];\n\n\t\t\tif (callback) {\n\t\t\t\tthis[name][first? \"unshift\" : \"push\"](callback);\n\t\t\t}\n\t\t}, this);\n\t}\n\n\trun (name, env) {\n\t\tthis[name] = this[name] || [];\n\t\tthis[name].forEach(function(callback) {\n\t\t\tcallback.call(env && env.context? env.context : env, env);\n\t\t});\n\t}\n};\n\n/**\n * The instance of {@link Hooks} used throughout Color.js\n */\nconst hooks = new Hooks();\n\nexport default hooks;","// Global defaults one may want to configure\nconst hasDOM = typeof document !== \"undefined\";\n\nexport default {\n\tgamut_mapping: \"lch.c\",\n\tprecision: 5,\n\tdeltaE: \"76\", // Default deltaE method\n}","import hooks from \"./hooks.js\";\nimport {multiplyMatrices} from \"./util.js\"\n\nexport const WHITES = {\n\t// for compatibility, the four-digit chromaticity-derived ones everyone else uses\n\tD50: [0.3457 / 0.3585, 1.00000, (1.0 - 0.3457 - 0.3585) / 0.3585],\n\tD65: [0.3127 / 0.3290, 1.00000, (1.0 - 0.3127 - 0.3290) / 0.3290],\n}\n\nexport function getWhite(name) {\n\tif (Array.isArray(name)) {\n\t\treturn name;\n\t}\n\n\treturn WHITES[name];\n}\n\n// Adapt XYZ from white point W1 to W2\nexport default function adapt (W1, W2, XYZ, options = {}) {\n\tW1 = getWhite(W1);\n\tW2 = getWhite(W2);\n\n\tif (!W1 || !W2) {\n\t\tthrow new TypeError(`Missing white point to convert ${!W1? \"from\" : \"\"}${!W1&&!W2? \"/\" : \"\"}${!W2? \"to\" : \"\"}`);\n\t}\n\n\tif (W1 === W2) {\n\t\t// Same whitepoints, no conversion needed\n\t\treturn XYZ;\n\t}\n\n\tlet env = {W1, W2, XYZ, options};\n\n\thooks.run(\"chromatic-adaptation-start\", env);\n\n\tif (!env.M) {\n\t\tif (env.W1 === WHITES.D65 && env.W2 === WHITES.D50) {\n\t\t\tenv.M = [\n\t\t\t\t[ 1.0479298208405488, 0.022946793341019088, -0.05019222954313557 ],\n\t\t\t\t[ 0.029627815688159344, 0.990434484573249, -0.01707382502938514 ],\n\t\t\t\t[ -0.009243058152591178, 0.015055144896577895, 0.7518742899580008 ]\n\t\t\t];\n\t\t}\n\t\telse if (env.W1 === WHITES.D50 && env.W2 === WHITES.D65) {\n\n\t\t\tenv.M = [\n\t\t\t\t[ 0.9554734527042182, -0.023098536874261423, 0.0632593086610217 ],\n\t\t\t\t[ -0.028369706963208136, 1.0099954580058226, 0.021041398966943008 ],\n\t\t\t\t[ 0.012314001688319899, -0.020507696433477912, 1.3303659366080753 ]\n\t\t\t];\n\t\t}\n\t}\n\n\thooks.run(\"chromatic-adaptation-end\", env);\n\n\tif (env.M) {\n\t\treturn multiplyMatrices(env.M, env.XYZ);\n\t}\n\telse {\n\t\tthrow new TypeError(\"Only Bradford CAT with white points D50 and D65 supported for now.\");\n\t}\n}\n","import {type, parseCoordGrammar, toPrecision, mapRange} from \"./util.js\";\nimport {getWhite} from \"./adapt.js\";\nimport hooks from \"./hooks.js\";\n\nconst ε = .000075;\n\n/**\n * Class to represent a color space\n */\nexport default class ColorSpace {\n\tconstructor (options) {\n\t\tthis.id = options.id;\n\t\tthis.name = options.name;\n\t\tthis.base = options.base ? ColorSpace.get(options.base) : null;\n\t\tthis.aliases = options.aliases;\n\n\t\tif (this.base) {\n\t\t\tthis.fromBase = options.fromBase;\n\t\t\tthis.toBase = options.toBase;\n\t\t}\n\n\t\t// Coordinate metadata\n\n\t\tlet coords = options.coords ?? this.base.coords;\n\t\tthis.coords = coords;\n\n\t\t// White point\n\n\t\tlet white = options.white ?? this.base.white ?? \"D65\";\n\t\tthis.white = getWhite(white);\n\n\t\t// Sort out formats\n\n\t\tthis.formats = options.formats ?? {};\n\n\t\tfor (let name in this.formats) {\n\t\t\tlet format = this.formats[name];\n\t\t\tformat.type ||= \"function\";\n\t\t\tformat.name ||= name;\n\t\t}\n\n\t\tif (options.cssId && !this.formats.functions?.color) {\n\t\t\tthis.formats.color = { id: options.cssId };\n\t\t\tObject.defineProperty(this, \"cssId\", {value: options.cssId});\n\t\t}\n\t\telse if (this.formats?.color && !this.formats?.color.id) {\n\t\t\tthis.formats.color.id = this.id;\n\t\t}\n\n\t\t// Other stuff\n\t\tthis.referred = options.referred;\n\n\t\t// Compute ancestors and store them, since they will never change\n\t\tthis.#path = this.#getPath().reverse();\n\n\t\thooks.run(\"colorspace-init-end\", this);\n\t}\n\n\tinGamut (coords, {epsilon = ε} = {}) {\n\t\tif (this.isPolar) {\n\t\t\t// Do not check gamut through polar coordinates\n\t\t\tcoords = this.toBase(coords);\n\n\t\t\treturn this.base.inGamut(coords, {epsilon});\n\t\t}\n\n\t\tlet coordMeta = Object.values(this.coords);\n\n\t\treturn coords.every((c, i) => {\n\t\t\tlet meta = coordMeta[i];\n\n\t\t\tif (meta.type !== \"angle\" && meta.range) {\n\t\t\t\tif (Number.isNaN(c)) {\n\t\t\t\t\t// NaN is always in gamut\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet [min, max] = meta.range;\n\t\t\t\treturn (min === undefined || c >= min - epsilon)\n\t\t\t\t && (max === undefined || c <= max + epsilon);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tget cssId () {\n\t\treturn this.formats.functions?.color?.id || this.id;\n\t}\n\n\tget isPolar() {\n\t\tfor (let id in this.coords) {\n\t\t\tif (this.coords[id].type === \"angle\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#processFormat(format) {\n\t\tif (format.coords && !format.coordGrammar) {\n\t\t\tformat.type ||= \"function\";\n\t\t\tformat.name ||= \"color\";\n\n\t\t\t// Format has not been processed\n\t\t\tformat.coordGrammar = parseCoordGrammar(format.coords);\n\n\t\t\tlet coordFormats = Object.entries(this.coords).map(([id, coordMeta], i) => {\n\t\t\t\t// Preferred format for each coord is the first one\n\t\t\t\tlet outputType = format.coordGrammar[i][0];\n\n\t\t\t\tlet fromRange = coordMeta.range || coordMeta.refRange;\n\t\t\t\tlet toRange = outputType.range, suffix = \"\";\n\n\t\t\t\t// Non-strict equals intentional since outputType could be a string object\n\t\t\t\tif (outputType == \"\") {\n\t\t\t\t\ttoRange = [0, 100];\n\t\t\t\t\tsuffix = \"%\";\n\t\t\t\t}\n\t\t\t\telse if (outputType == \"\") {\n\t\t\t\t\tsuffix = \"deg\";\n\t\t\t\t}\n\n\t\t\t\treturn {fromRange, toRange, suffix};\n\t\t\t});\n\n\t\t\tformat.serializeCoords = (coords, precision) => {\n\t\t\t\treturn coords.map((c, i) => {\n\t\t\t\t\tlet {fromRange, toRange, suffix} = coordFormats[i];\n\n\t\t\t\t\tif (fromRange && toRange) {\n\t\t\t\t\t\tc = mapRange(fromRange, toRange, c);\n\t\t\t\t\t}\n\n\t\t\t\t\tc = toPrecision(c, precision);\n\n\t\t\t\t\tif (suffix) {\n\t\t\t\t\t\tc += suffix;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn c;\n\t\t\t\t})\n\t\t\t};\n\t\t}\n\n\t\treturn format;\n\t}\n\n\tgetFormat (format) {\n\t\tif (typeof format === \"object\") {\n\t\t\tformat = this.#processFormat(format);\n\t\t\treturn format;\n\t\t}\n\n\t\tlet ret;\n\t\tif (format === \"default\") {\n\t\t\t// Get first format\n\t\t\tret = Object.values(this.formats)[0];\n\t\t}\n\t\telse {\n\t\t\tret = this.formats[format];\n\t\t}\n\n\t\tif (ret) {\n\t\t\tret = this.#processFormat(ret);\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t#path\n\n\t#getPath () {\n\t\tlet ret = [this];\n\n\t\tfor (let space = this; space = space.base;) {\n\t\t\tret.push(space);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tto (space, coords) {\n\t\tif (arguments.length === 1) {\n\t\t\t[space, coords] = [space.space, space.coords];\n\t\t}\n\n\t\tspace = ColorSpace.get(space);\n\n\t\tif (this === space) {\n\t\t\t// Same space, no change needed\n\t\t\treturn coords;\n\t\t}\n\n\t\t// Convert NaN to 0, which seems to be valid in every coordinate of every color space\n\t\tcoords = coords.map(c => Number.isNaN(c)? 0 : c);\n\n\t\t// Find connection space = lowest common ancestor in the base tree\n\t\tlet myPath = this.#path;\n\t\tlet otherPath = space.#path;\n\n\t\tlet connectionSpace, connectionSpaceIndex;\n\n\t\tfor (let i=0; i < myPath.length; i++) {\n\t\t\tif (myPath[i] === otherPath[i]) {\n\t\t\t\tconnectionSpace = myPath[i];\n\t\t\t\tconnectionSpaceIndex = i;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!connectionSpace) {\n\t\t\t// This should never happen\n\t\t\tthrow new Error(`Cannot convert between color spaces ${this} and ${space}: no connection space was found`);\n\t\t}\n\n\t\t// Go up from current space to connection space\n\t\tfor (let i = myPath.length - 1; i > connectionSpaceIndex; i--) {\n\t\t\tcoords = myPath[i].toBase(coords);\n\t\t}\n\n\t\t// Go down from connection space to target space\n\t\tfor (let i = connectionSpaceIndex + 1; i < otherPath.length; i++) {\n\t\t\tcoords = otherPath[i].fromBase(coords);\n\t\t}\n\n\t\treturn coords;\n\t}\n\n\tfrom (space, coords) {\n\t\tif (arguments.length === 1) {\n\t\t\t[space, coords] = [space.space, space.coords];\n\t\t}\n\n\t\tspace = ColorSpace.get(space);\n\n\t\treturn space.to(this, coords);\n\t}\n\n\ttoString () {\n\t\treturn `${this.name} (${this.id})`;\n\t}\n\n\tgetMinCoords () {\n\t\tlet ret = [];\n\n\t\tfor (let id in this.coords) {\n\t\t\tlet meta = this.coords[id];\n\t\t\tlet range = meta.range || meta.refRange;\n\t\t\tret.push(range?.min ?? 0);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tstatic registry = {}\n\n\t// Returns array of unique color spaces\n\tstatic get all () {\n\t\treturn [...new Set(Object.values(ColorSpace.registry))];\n\t}\n\n\tstatic register (id, space) {\n\t\tif (arguments.length === 1) {\n\t\t\tspace = arguments[0];\n\t\t\tid = space.id;\n\t\t}\n\n\t\tspace = this.get(space);\n\n\t\tif (this.registry[id] && this.registry[id] !== space) {\n\t\t\tthrow new Error(`Duplicate color space registration: '${id}'`);\n\t\t}\n\t\tthis.registry[id] = space;\n\n\t\t// Register aliases when called without an explicit ID.\n\t\tif (arguments.length === 1 && space.aliases) {\n\t\t\tfor (let alias of space.aliases) {\n\t\t\t\tthis.register(alias, space);\n\t\t\t}\n\t\t}\n\n\t\treturn space;\n\t}\n\n\t/**\n\t * Lookup ColorSpace object by name\n\t * @param {ColorSpace | string} name\n\t */\n\tstatic get (space, ...alternatives) {\n\t\tif (!space || space instanceof ColorSpace) {\n\t\t\treturn space;\n\t\t}\n\n\t\tlet argType = type(space);\n\n\t\tif (argType === \"string\") {\n\t\t\t// It's a color space id\n\t\t\tlet ret = ColorSpace.registry[space.toLowerCase()];\n\n\t\t\tif (!ret) {\n\t\t\t\tthrow new TypeError(`No color space found with id = \"${space}\"`);\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tif (alternatives.length) {\n\t\t\treturn ColorSpace.get(...alternatives);\n\t\t}\n\n\t\tthrow new TypeError(`${space} is not a valid color space`);\n\t}\n\n\t/**\n\t * Get metadata about a coordinate of a color space\n\t *\n\t * @static\n\t * @param {Array | string} ref\n\t * @param {ColorSpace | string} [workingSpace]\n\t * @return {Object}\n\t */\n\tstatic resolveCoord (ref, workingSpace) {\n\t\tlet coordType = type(ref);\n\t\tlet space, coord;\n\n\t\tif (coordType === \"string\") {\n\t\t\tif (ref.includes(\".\")) {\n\t\t\t\t// Absolute coordinate\n\t\t\t\t[space, coord] = ref.split(\".\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Relative coordinate\n\t\t\t\t[space, coord] = [, ref];\n\t\t\t}\n\t\t}\n\t\telse if (Array.isArray(ref)) {\n\t\t\t[space, coord] = ref;\n\t\t}\n\t\telse {\n\t\t\t// Object\n\t\t\tspace = ref.space;\n\t\t\tcoord = ref.coordId;\n\t\t}\n\n\t\tspace = ColorSpace.get(space);\n\n\t\tif (!space) {\n\t\t\tspace = workingSpace;\n\t\t}\n\n\t\tif (!space) {\n\t\t\tthrow new TypeError(`Cannot resolve coordinate reference ${ref}: No color space specified and relative references are not allowed here`);\n\t\t}\n\n\t\tcoordType = type(coord);\n\n\t\tif (coordType === \"number\" || coordType === \"string\" && coord >= 0) {\n\t\t\t// Resolve numerical coord\n\t\t\tlet meta = Object.entries(space.coords)[coord];\n\n\t\t\tif (meta) {\n\t\t\t\treturn {space, id: meta[0], index: coord, ...meta[1]}\n\t\t\t}\n\t\t}\n\n\t\tspace = ColorSpace.get(space);\n\n\t\tlet normalizedCoord = coord.toLowerCase();\n\n\t\tlet i = 0;\n\t\tfor (let id in space.coords) {\n\t\t\tlet meta = space.coords[id];\n\n\t\t\tif (id.toLowerCase() === normalizedCoord || meta.name?.toLowerCase() === normalizedCoord) {\n\t\t\t\treturn {space, id, index: i, ...meta};\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\n\t\tthrow new TypeError(`No \"${coord}\" coordinate found in ${space.name}. Its coordinates are: ${Object.keys(space.coords).join(\", \")}`);\n\t}\n\n\tstatic DEFAULT_FORMAT = {\n\t\ttype: \"functions\",\n\t\tname: \"color\",\n\t}\n}\n","import ColorSpace from \"../space.js\";\n\nexport default new ColorSpace({\n\tid: \"xyz-d65\",\n\tname: \"XYZ D65\",\n\tcoords: {\n\t\tx: {name: \"X\"},\n\t\ty: {name: \"Y\"},\n\t\tz: {name: \"Z\"},\n\t},\n\twhite: \"D65\",\n\tformats: {\n\t\tcolor: {\n\t\t\tids: ['xyz-d65', 'xyz'],\n\t\t}\n\t},\n\taliases: ['xyz'],\n});\n","import ColorSpace from \"./space.js\";\nimport {multiplyMatrices} from \"./util.js\";\nimport adapt from \"./adapt.js\";\nimport XYZ_D65 from \"./spaces/xyz-d65.js\";\n\n/**\n * Convenience class for RGB color spaces\n * @extends {ColorSpace}\n */\nexport default class RGBColorSpace extends ColorSpace {\n\t/**\n\t * Creates a new RGB ColorSpace.\n\t * If coords are not specified, they will use the default RGB coords.\n\t * Instead of `fromBase()` and `toBase()` functions,\n\t * you can specify to/from XYZ matrices and have `toBase()` and `fromBase()` automatically generated.\n\t * @param {*} options - Same options as {@link ColorSpace} plus:\n\t * @param {number[][]} options.toXYZ_M - Matrix to convert to XYZ\n\t * @param {number[][]} options.fromXYZ_M - Matrix to convert from XYZ\n\t */\n\tconstructor (options) {\n\t\tif (!options.coords) {\n\t\t\toptions.coords = {\n\t\t\t\tr: {\n\t\t\t\t\trange: [0, 1],\n\t\t\t\t\tname: \"Red\"\n\t\t\t\t},\n\t\t\t\tg: {\n\t\t\t\t\trange: [0, 1],\n\t\t\t\t\tname: \"Green\"\n\t\t\t\t},\n\t\t\t\tb: {\n\t\t\t\t\trange: [0, 1],\n\t\t\t\t\tname: \"Blue\"\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!options.base) {\n\t\t\toptions.base = XYZ_D65;\n\t\t}\n\n\t\tif (options.toXYZ_M && options.fromXYZ_M) {\n\t\t\toptions.toBase ??= rgb => {\n\t\t\t\tlet xyz = multiplyMatrices(options.toXYZ_M, rgb);\n\n\t\t\t\tif (this.white !== this.base.white) {\n\t\t\t\t\t// Perform chromatic adaptation\n\t\t\t\t\txyz = adapt(this.white, this.base.white, xyz);\n\t\t\t\t}\n\n\t\t\t\treturn xyz;\n\t\t\t};\n\n\t\t\toptions.fromBase ??= xyz => {\n\t\t\t\txyz = adapt(this.base.white, this.white, xyz);\n\t\t\t\treturn multiplyMatrices(options.fromXYZ_M, xyz);\n\t\t\t};\n\t\t}\n\n\t\toptions.referred ??= \"display\";\n\n\t\tsuper(options);\n\t}\n}\n","import * as util from \"./util.js\";\nimport hooks from \"./hooks.js\";\nimport ColorSpace from \"./space.js\";\n\n// CSS color to Color object\nexport default function parse (str) {\n\tlet env = {\"str\": String(str)?.trim()};\n\thooks.run(\"parse-start\", env);\n\n\tif (env.color) {\n\t\treturn env.color;\n\t}\n\n\tenv.parsed = util.parseFunction(env.str);\n\n\tif (env.parsed) {\n\t\t// Is a functional syntax\n\t\tlet name = env.parsed.name;\n\n\t\tif (name === \"color\") {\n\t\t\t// color() function\n\t\t\tlet id = env.parsed.args.shift();\n\t\t\tlet alpha = env.parsed.rawArgs.indexOf(\"/\") > 0? env.parsed.args.pop() : 1;\n\n\t\t\tfor (let space of ColorSpace.all) {\n\t\t\t\tlet colorSpec = space.getFormat(\"color\");\n\n\t\t\t\tif (colorSpec) {\n\t\t\t\t\tif (id === colorSpec.id || colorSpec.ids?.includes(id)) {\n\t\t\t\t\t\t// From https://drafts.csswg.org/css-color-4/#color-function\n\t\t\t\t\t\t// If more s or s are provided than parameters that the colorspace takes, the excess s at the end are ignored.\n\t\t\t\t\t\t// If less s or s are provided than parameters that the colorspace takes, the missing parameters default to 0. (This is particularly convenient for multichannel printers where the additional inks are spot colors or varnishes that most colors on the page won’t use.)\n\t\t\t\t\t\tlet argCount = Object.keys(space.coords).length;\n\t\t\t\t\t\tlet coords = Array(argCount).fill(0);\n\t\t\t\t\t\tcoords.forEach((_, i) => coords[i] = env.parsed.args[i] || 0);\n\n\t\t\t\t\t\treturn {spaceId: space.id, coords, alpha};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Not found\n\t\t\tlet didYouMean = \"\";\n\t\t\tif (id in ColorSpace.registry) {\n\t\t\t\t// Used color space id instead of color() id, these are often different\n\t\t\t\tlet cssId = ColorSpace.registry[id].formats?.functions?.color?.id;\n\n\t\t\t\tif (cssId) {\n\t\t\t\t\tdidYouMean = `Did you mean color(${cssId})?`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError(`Cannot parse color(${id}). ` + (didYouMean || \"Missing a plugin?\"));\n\t\t}\n\t\telse {\n\t\t\tfor (let space of ColorSpace.all) {\n\t\t\t\t// color space specific function\n\t\t\t\tlet format = space.getFormat(name);\n\t\t\t\tif (format && format.type === \"function\") {\n\t\t\t\t\tlet alpha = 1;\n\n\t\t\t\t\tif (format.lastAlpha || util.last(env.parsed.args).alpha) {\n\t\t\t\t\t\talpha = env.parsed.args.pop();\n\t\t\t\t\t}\n\n\t\t\t\t\tlet coords = env.parsed.args;\n\n\t\t\t\t\tif (format.coordGrammar) {\n\t\t\t\t\t\tObject.entries(space.coords).forEach(([id, coordMeta], i) => {\n\t\t\t\t\t\t\tlet coordGrammar = format.coordGrammar[i];\n\t\t\t\t\t\t\tlet providedType = coords[i]?.type;\n\n\t\t\t\t\t\t\t// Find grammar alternative that matches the provided type\n\t\t\t\t\t\t\t// Non-strict equals is intentional because we are comparing w/ string objects\n\t\t\t\t\t\t\tcoordGrammar = coordGrammar.find(c => c == providedType);\n\n\t\t\t\t\t\t\t// Check that each coord conforms to its grammar\n\t\t\t\t\t\t\tif (!coordGrammar) {\n\t\t\t\t\t\t\t\t// Type does not exist in the grammar, throw\n\t\t\t\t\t\t\t\tlet coordName = coordMeta.name || id;\n\t\t\t\t\t\t\t\tthrow new TypeError(`${providedType} not allowed for ${coordName} in ${name}()`);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet fromRange = coordGrammar.range;\n\n\t\t\t\t\t\t\tif (providedType === \"\") {\n\t\t\t\t\t\t\t\tfromRange ||= [0, 1];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet toRange = coordMeta.range || coordMeta.refRange;\n\n\t\t\t\t\t\t\tif (fromRange && toRange) {\n\n\t\t\t\t\t\t\t\tcoords[i] = util.mapRange(fromRange, toRange, coords[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspaceId: space.id,\n\t\t\t\t\t\tcoords, alpha\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\t// Custom, colorspace-specific format\n\t\tfor (let space of ColorSpace.all) {\n\n\t\t\tfor (let formatId in space.formats) {\n\t\t\t\tlet format = space.formats[formatId];\n\n\t\t\t\tif (format.type !== \"custom\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (format.test && !format.test(env.str)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet color = format.parse(env.str);\n\n\t\t\t\tif (color) {\n\t\t\t\t\tcolor.alpha ??= 1;\n\t\t\t\t\treturn color;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// If we're here, we couldn't parse\n\tthrow new TypeError(`Could not parse ${str} as a color. Missing a plugin?`);\n}","import ColorSpace from \"./space.js\";\nimport {isString} from \"./util.js\";\nimport parse from \"./parse.js\";\n\n/**\n * Resolves a color reference (object or string) to a plain color object\n * @param {Color | {space, coords, alpha} | string} color\n * @returns {{space, coords, alpha}}\n */\nexport default function getColor (color) {\n\tif (!color) {\n\t\tthrow new TypeError(\"Empty color reference\");\n\t}\n\n\tif (isString(color)) {\n\t\tcolor = parse(color);\n\t}\n\n\t// Object fixup\n\tlet space = color.space || color.spaceId;\n\n\tif (!(space instanceof ColorSpace)) {\n\t\t// Convert string id to color space object\n\t\tcolor.space = ColorSpace.get(space);\n\t}\n\n\tif (color.alpha === undefined) {\n\t\tcolor.alpha = 1;\n\t}\n\n\treturn color;\n}","import ColorSpace from \"./space.js\";\n\n/**\n * Get the coordinates of a color in another color space\n *\n * @param {string | ColorSpace} space\n * @returns {number[]}\n */\nexport default function getAll (color, space) {\n\tspace = ColorSpace.get(space);\n\treturn space.from(color);\n}","import ColorSpace from \"./space.js\";\nimport getAll from \"./getAll.js\";\n\nexport default function get (color, prop) {\n\tlet {space, index} = ColorSpace.resolveCoord(prop, color.space);\n\tlet coords = getAll(color, space);\n\treturn coords[index];\n}","import ColorSpace from \"./space.js\";\n\nexport default function setAll (color, space, coords) {\n\tspace = ColorSpace.get(space);\n\tcolor.coords = space.to(color.space, coords);\n\treturn color;\n}","import ColorSpace from \"./space.js\";\nimport getColor from \"./getColor.js\";\nimport get from \"./get.js\";\nimport getAll from \"./getAll.js\";\nimport setAll from \"./setAll.js\";\nimport {type} from \"./util.js\";\n\n// Set properties and return current instance\nexport default function set (color, prop, value) {\n\tcolor = getColor(color);\n\n\tif (arguments.length === 2 && type(arguments[1]) === \"object\") {\n\t\t// Argument is an object literal\n\t\tlet object = arguments[1];\n\t\tfor (let p in object) {\n\t\t\tset(color, p, object[p]);\n\t\t}\n\t}\n\telse {\n\t\tif (typeof value === \"function\") {\n\t\t\tvalue = value(get(color, prop));\n\t\t}\n\n\t\tlet {space, index} = ColorSpace.resolveCoord(prop, color.space);\n\t\tlet coords = getAll(color, space);\n\t\tcoords[index] = value;\n\t\tsetAll(color, space, coords);\n\t}\n\n\treturn color;\n}","import ColorSpace from \"../space.js\";\nimport adapt from \"../adapt.js\";\nimport XYZ_D65 from \"./xyz-d65.js\";\n\nexport default new ColorSpace({\n\tid: \"xyz-d50\",\n\tname: \"XYZ D50\",\n\twhite: \"D50\",\n\tbase: XYZ_D65,\n\tfromBase: coords => adapt(XYZ_D65.white, \"D50\", coords),\n\ttoBase: coords => adapt(\"D50\", XYZ_D65.white, coords),\n\tformats: {\n\t\tcolor: {}\n\t},\n});\n","import ColorSpace from \"../space.js\";\nimport {WHITES} from \"../adapt.js\";\nimport xyz_d50 from \"./xyz-d50.js\";\n\n// κ * ε = 2^3 = 8\nconst ε = 216/24389; // 6^3/29^3 == (24/116)^3\nconst ε3 = 24/116;\nconst κ = 24389/27; // 29^3/3^3\n\nlet white = WHITES.D50;\n\nexport default new ColorSpace({\n\tid: \"lab\",\n\tname: \"Lab\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"L\"\n\t\t},\n\t\ta: {\n\t\t\trefRange: [-125, 125]\n\t\t},\n\t\tb: {\n\t\t\trefRange: [-125, 125]\n\t\t}\n\t},\n\n\t// Assuming XYZ is relative to D50, convert to CIE Lab\n\t// from CIE standard, which now defines these as a rational fraction\n\twhite,\n\n\tbase: xyz_d50,\n\t// Convert D50-adapted XYX to Lab\n\t// CIE 15.3:2004 section 8.2.1.1\n\tfromBase (XYZ) {\n\t\t// compute xyz, which is XYZ scaled relative to reference white\n\t\tlet xyz = XYZ.map((value, i) => value / white[i]);\n\n\t\t// now compute f\n\t\tlet f = xyz.map(value => value > ε ? Math.cbrt(value) : (κ * value + 16)/116);\n\n\t\treturn [\n\t\t\t(116 * f[1]) - 16, \t // L\n\t\t\t500 * (f[0] - f[1]), // a\n\t\t\t200 * (f[1] - f[2]) // b\n\t\t];\n\t},\n\t// Convert Lab to D50-adapted XYZ\n\t// Same result as CIE 15.3:2004 Appendix D although the derivation is different\n\t// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\ttoBase (Lab) {\n\t\t// compute f, starting with the luminance-related term\n\t\tlet f = [];\n\t\tf[1] = (Lab[0] + 16)/116;\n\t\tf[0] = Lab[1]/500 + f[1];\n\t\tf[2] = f[1] - Lab[2]/200;\n\n\t\t// compute xyz\n\t\tlet xyz = [\n\t\t\tf[0] > ε3 ? Math.pow(f[0], 3) : (116*f[0]-16)/κ,\n\t\t\tLab[0] > 8 ? Math.pow((Lab[0]+16)/116, 3) : Lab[0]/κ,\n\t\t\tf[2] > ε3 ? Math.pow(f[2], 3) : (116*f[2]-16)/κ\n\t\t];\n\n\t\t// Compute XYZ by scaling xyz by reference white\n\t\treturn xyz.map((value, i) => value * white[i]);\n\t},\n\n\tformats: {\n\t\t\"lab\": {\n\t\t\tcoords: [\" | \", \"\", \"\"],\n\t\t}\n\t}\n});\n","export function constrain (angle) {\n\treturn ((angle % 360) + 360) % 360;\n}\n\nexport function adjust (arc, angles) {\n\tif (arc === \"raw\") {\n\t\treturn angles;\n\t}\n\n\tlet [a1, a2] = angles.map(constrain);\n\n\tlet angleDiff = a2 - a1;\n\n\tif (arc === \"increasing\") {\n\t\tif (angleDiff < 0) {\n\t\t\ta2 += 360;\n\t\t}\n\t}\n\telse if (arc === \"decreasing\") {\n\t\tif (angleDiff > 0) {\n\t\t\ta1 += 360;\n\t\t}\n\t}\n\telse if (arc === \"longer\") {\n\t\tif (-180 < angleDiff && angleDiff < 180) {\n\t\t\tif (angleDiff > 0) {\n\t\t\t\ta2 += 360;\n\t\t\t}\n\t\t\telse {\n\t\t\t\ta1 += 360;\n\t\t\t}\n\t\t}\n\t}\n\telse if (arc === \"shorter\") {\n\t\tif (angleDiff > 180) {\n\t\t\ta1 += 360;\n\t\t}\n\t\telse if (angleDiff < -180) {\n\t\t\ta2 += 360;\n\t\t}\n\t}\n\n\treturn [a1, a2];\n}\n","import ColorSpace from \"../space.js\";\nimport Lab from \"./lab.js\";\nimport {constrain as constrainAngle} from \"../angles.js\";\n\nexport default new ColorSpace({\n\tid: \"lch\",\n\tname: \"LCH\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 100],\n\t\t\tname: \"Lightness\"\n\t\t},\n\t\tc: {\n\t\t\trefRange: [0, 150],\n\t\t\tname: \"Chroma\"\n\t\t},\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\"\n\t\t}\n\t},\n\n\tbase: Lab,\n\tfromBase (Lab) {\n\t\t// Convert to polar form\n\t\tlet [L, a, b] = Lab;\n\t\tlet hue;\n\t\tconst ε = 0.02;\n\n\t\tif (Math.abs(a) < ε && Math.abs(b) < ε) {\n\t\t\thue = NaN;\n\t\t}\n\t\telse {\n\t\t\thue = Math.atan2(b, a) * 180 / Math.PI;\n\t\t}\n\n\t\treturn [\n\t\t\tL, // L is still L\n\t\t\tMath.sqrt(a ** 2 + b ** 2), // Chroma\n\t\t\tconstrainAngle(hue) // Hue, in degrees [0 to 360)\n\t\t];\n\t},\n\ttoBase (LCH) {\n\t\t// Convert from polar form\n\t\tlet [Lightness, Chroma, Hue] = LCH;\n\t\t// Clamp any negative Chroma\n\t\tif (Chroma < 0) {\n\t\t\tChroma = 0;\n\t\t};\n\t\t// Deal with NaN Hue\n\t\tif (isNaN(Hue)) {\n\t\t\tHue = 0;\n\t\t}\n\t\treturn [\n\t\t\tLightness, // L is still L\n\t\t\tChroma * Math.cos(Hue * Math.PI / 180), // a\n\t\t\tChroma * Math.sin(Hue * Math.PI / 180) // b\n\t\t];\n\t},\n\n\tformats: {\n\t\t\"lch\": {\n\t\t\tcoords: [\" | \", \"\", \" | \"],\n\t\t}\n\t}\n});\n","import lab from \"../spaces/lab.js\";\nimport lch from \"../spaces/lch.js\";\n\n// deltaE2000 is a statistically significant improvement\n// and is recommended by the CIE and Idealliance\n// especially for color differences less than 10 deltaE76\n// but is wicked complicated\n// and many implementations have small errors!\n// DeltaE2000 is also discontinuous; in case this\n// matters to you, use deltaECMC instead.\n\nconst Gfactor = 25 ** 7;\nconst π = Math.PI;\nconst r2d = 180 / π;\nconst d2r = π / 180;\n\nexport default function (color, sample, {kL = 1, kC = 1, kH = 1} = {}) {\n\t// Given this color as the reference\n\t// and the function parameter as the sample,\n\t// calculate deltaE 2000.\n\n\t// This implementation assumes the parametric\n\t// weighting factors kL, kC and kH\n\t// for the influence of viewing conditions\n\t// are all 1, as sadly seems typical.\n\t// kL should be increased for lightness texture or noise\n\t// and kC increased for chroma noise\n\n\tlet [L1, a1, b1] = lab.from(color);\n\tlet C1 = lch.from(lab, [L1, a1, b1])[1];\n\tlet [L2, a2, b2] = lab.from(sample);\n\tlet C2 = lch.from(lab, [L2, a2, b2])[1];\n\n\t// Check for negative Chroma,\n\t// which might happen through\n\t// direct user input of LCH values\n\n\tif (C1 < 0) {\n\t\tC1 = 0;\n\t}\n\tif (C2 < 0) {\n\t\tC2 = 0;\n\t}\n\n\tlet Cbar = (C1 + C2)/2; // mean Chroma\n\n\t// calculate a-axis asymmetry factor from mean Chroma\n\t// this turns JND ellipses for near-neutral colors back into circles\n\tlet C7 = Cbar ** 7;\n\n\tlet G = 0.5 * (1 - Math.sqrt(C7/(C7 + Gfactor)));\n\n\t// scale a axes by asymmetry factor\n\t// this by the way is why there is no Lab2000 colorspace\n\tlet adash1 = (1 + G) * a1;\n\tlet adash2 = (1 + G) * a2;\n\n\t// calculate new Chroma from scaled a and original b axes\n\tlet Cdash1 = Math.sqrt(adash1 ** 2 + b1 ** 2);\n\tlet Cdash2 = Math.sqrt(adash2 ** 2 + b2 ** 2);\n\n\t// calculate new hues, with zero hue for true neutrals\n\t// and in degrees, not radians\n\n\tlet h1 = (adash1 === 0 && b1 === 0)? 0: Math.atan2(b1, adash1);\n\tlet h2 = (adash2 === 0 && b2 === 0)? 0: Math.atan2(b2, adash2);\n\n\tif (h1 < 0) {\n\t\th1 += 2 * π;\n\t}\n\tif (h2 < 0) {\n\t\th2 += 2 * π;\n\t}\n\n\th1 *= r2d;\n\th2 *= r2d;\n\n\t// Lightness and Chroma differences; sign matters\n\tlet ΔL = L2 - L1;\n\tlet ΔC = Cdash2 - Cdash1;\n\n\t// Hue difference, getting the sign correct\n\tlet hdiff = h2 - h1;\n\tlet hsum = h1 + h2;\n\tlet habs = Math.abs(hdiff);\n\tlet Δh;\n\n\tif (Cdash1 * Cdash2 === 0) {\n\t\tΔh = 0;\n\t}\n\telse if (habs <= 180) {\n\t\tΔh = hdiff;\n\t}\n\telse if (hdiff > 180) {\n\t\tΔh = hdiff - 360;\n\t}\n\telse if (hdiff < -180) {\n\t\tΔh = hdiff + 360;\n\t}\n\telse {\n\t\tconsole.log(\"the unthinkable has happened\");\n\t}\n\n\t// weighted Hue difference, more for larger Chroma\n\tlet ΔH = 2 * Math.sqrt(Cdash2 * Cdash1) * Math.sin(Δh * d2r / 2);\n\n\t// calculate mean Lightness and Chroma\n\tlet Ldash = (L1 + L2)/2;\n\tlet Cdash = (Cdash1 + Cdash2)/2;\n\tlet Cdash7 = Math.pow(Cdash, 7);\n\n\t// Compensate for non-linearity in the blue region of Lab.\n\t// Four possibilities for hue weighting factor,\n\t// depending on the angles, to get the correct sign\n\tlet hdash;\n\tif (Cdash1 * Cdash2 === 0) {\n\t\thdash = hsum; // which should be zero\n\t}\n\telse if (habs <= 180) {\n\t\thdash = hsum / 2;\n\t}\n\telse if (hsum < 360) {\n\t\thdash = (hsum + 360) / 2;\n\t}\n\telse {\n\t\thdash = (hsum - 360) / 2;\n\t}\n\n\t// positional corrections to the lack of uniformity of CIELAB\n\t// These are all trying to make JND ellipsoids more like spheres\n\n\t// SL Lightness crispening factor\n\t// a background with L=50 is assumed\n\tlet lsq = (Ldash - 50) ** 2;\n\tlet SL = 1 + ((0.015 * lsq) / Math.sqrt(20 + lsq));\n\n\t// SC Chroma factor, similar to those in CMC and deltaE 94 formulae\n\tlet SC = 1 + 0.045 * Cdash;\n\n\t// Cross term T for blue non-linearity\n\tlet T = 1;\n\tT -= (0.17 * Math.cos(( hdash - 30) * d2r));\n\tT += (0.24 * Math.cos( 2 * hdash * d2r));\n\tT += (0.32 * Math.cos(((3 * hdash) + 6) * d2r));\n\tT -= (0.20 * Math.cos(((4 * hdash) - 63) * d2r));\n\n\t// SH Hue factor depends on Chroma,\n\t// as well as adjusted hue angle like deltaE94.\n\tlet SH = 1 + 0.015 * Cdash * T;\n\n\t// RT Hue rotation term compensates for rotation of JND ellipses\n\t// and Munsell constant hue lines\n\t// in the medium-high Chroma blue region\n\t// (Hue 225 to 315)\n\tlet Δθ = 30 * Math.exp(-1 * (((hdash - 275)/25) ** 2));\n\tlet RC = 2 * Math.sqrt(Cdash7/(Cdash7 + Gfactor));\n\tlet RT = -1 * Math.sin(2 * Δθ * d2r) * RC;\n\n\t// Finally calculate the deltaE, term by term as root sume of squares\n\tlet dE = (ΔL / (kL * SL)) ** 2;\n\tdE += (ΔC / (kC * SC)) ** 2;\n\tdE += (ΔH / (kH * SH)) ** 2;\n\tdE += RT * (ΔC / (kC * SC)) * (ΔH / (kH * SH));\n\treturn Math.sqrt(dE);\n\t// Yay!!!\n};","import ColorSpace from \"./space.js\";\nimport getColor from \"./getColor.js\";\n\nconst ε = .000075;\n\n/**\n * Check if a color is in gamut of either its own or another color space\n * @return {Boolean} Is the color in gamut?\n */\nexport default function inGamut (color, space = color.space, {epsilon = ε} = {}) {\n\tcolor = getColor(color);\n\tspace = ColorSpace.get(space);\n\tlet coords = color.coords;\n\n\tif (space !== color.space) {\n\t\tcoords = space.from(color);\n\t}\n\n\treturn space.inGamut(coords, {epsilon});\n}","export default function clone(color) {\n\treturn {\n\t\tspace: color.space,\n\t\tcoords: color.coords.slice(),\n\t\talpha: color.alpha\n\t};\n}","import * as util from \"./util.js\";\nimport ColorSpace from \"./space.js\";\nimport defaults from \"./defaults.js\";\nimport deltaE2000 from \"./deltaE/deltaE2000.js\";\nimport inGamut from \"./inGamut.js\";\nimport to from \"./to.js\";\nimport get from \"./get.js\";\nimport set from \"./set.js\";\nimport clone from \"./clone.js\";\n\n/**\n * Force coordinates to be in gamut of a certain color space.\n * Mutates the color it is passed.\n * @param {Object} options\n * @param {string} options.method - How to force into gamut.\n * If \"clip\", coordinates are just clipped to their reference range.\n * If in the form [colorSpaceId].[coordName], that coordinate is reduced\n * until the color is in gamut. Please note that this may produce nonsensical\n * results for certain coordinates (e.g. hue) or infinite loops if reducing the coordinate never brings the color in gamut.\n * @param {ColorSpace|string} options.space - The space whose gamut we want to map to\n */\nexport default function toGamut (color, {method = defaults.gamut_mapping, space = color.space} = {}) {\n\tif (util.isString(arguments[1])) {\n\t\tspace = arguments[1];\n\t}\n\n\tspace = ColorSpace.get(space);\n\n\tif (inGamut(color, space, {epsilon: 0})) {\n\t\treturn color;\n\t}\n\n\t// 3 spaces:\n\t// color.space: current color space\n\t// space: space whose gamut we are mapping to\n\t// mapSpace: space with the coord we're reducing\n\tlet spaceColor = to(color, space);\n\n\tif (method !== \"clip\" && !inGamut(color, space)) {\n\t\tlet clipped = toGamut(clone(spaceColor), {method: \"clip\", space});\n\t\tif (deltaE2000(color, clipped) > 2) {\n\t\t\t// Reduce a coordinate of a certain color space until the color is in gamut\n\t\t\tlet coordMeta = ColorSpace.resolveCoord(method);\n\t\t\tlet mapSpace = coordMeta.space;\n\t\t\tlet coordId = coordMeta.id;\n\n\t\t\tlet mappedColor = to(spaceColor, mapSpace);\n\t\t\tlet bounds = coordMeta.range || coordMeta.refRange;\n\t\t\tlet min = bounds[0];\n\t\t\tlet ε = .01; // for deltaE\n\t\t\tlet low = min;\n\t\t\tlet high = get(mappedColor, coordId);\n\n\t\t\twhile (high - low > ε) {\n\t\t\t\tlet clipped = clone(mappedColor);\n\t\t\t\tclipped = toGamut(clipped, {space, method: \"clip\"});\n\t\t\t\tlet deltaE = deltaE2000(mappedColor, clipped);\n\n\t\t\t\tif (deltaE - 2 < ε) {\n\t\t\t\t\tlow = get(mappedColor, coordId);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\thigh = get(mappedColor, coordId);\n\t\t\t\t}\n\n\t\t\t\tset(mappedColor, coordId, (low + high) / 2);\n\t\t\t}\n\n\t\t\tspaceColor = to(mappedColor, space);\n\t\t}\n\t\telse {\n\t\t\tspaceColor = clipped;\n\t\t}\n\t}\n\n\tif (method === \"clip\" // Dumb coord clipping\n\t\t// finish off smarter gamut mapping with clip to get rid of ε, see #17\n\t\t|| !inGamut(spaceColor, space, {epsilon: 0})\n\t) {\n\t\tlet bounds = Object.values(space.coords).map(c => c.range || []);\n\n\t\tspaceColor.coords = spaceColor.coords.map((c, i) => {\n\t\t\tlet [min, max] = bounds[i];\n\n\t\t\tif (min !== undefined) {\n\t\t\t\tc = Math.max(min, c);\n\t\t\t}\n\n\t\t\tif (max !== undefined) {\n\t\t\t\tc = Math.min(c, max);\n\t\t\t}\n\n\t\t\treturn c;\n\t\t});\n\t}\n\n\tif (space !== color.space) {\n\t\tspaceColor = to(spaceColor, color.space);\n\t}\n\n\tcolor.coords = spaceColor.coords;\n\treturn color;\n}\n\ntoGamut.returns = \"color\";","import getColor from \"./getColor.js\";\nimport ColorSpace from \"./space.js\";\nimport toGamut from \"./toGamut.js\";\n\n/**\n * Convert to color space and return a new color\n * @param {Object|string} space - Color space object or id\n * @param {Object} options\n * @param {boolean} options.inGamut - Whether to force resulting color in gamut\n * @returns {Color}\n */\nexport default function to (color, space, {inGamut} = {}) {\n\tcolor = getColor(color);\n\tspace = ColorSpace.get(space);\n\n\tlet coords = space.from(color);\n\tlet ret = {space, coords, alpha: color.alpha};\n\n\tif (inGamut) {\n\t\tret = toGamut(ret);\n\t}\n\n\treturn ret;\n}\n\nto.returns = \"color\";","import * as util from \"./util.js\";\nimport ColorSpace from \"./space.js\";\nimport defaults from \"./defaults.js\";\nimport getColor from \"./getColor.js\";\nimport to from \"./to.js\";\nimport checkInGamut from \"./inGamut.js\";\nimport toGamut from \"./toGamut.js\";\nimport clone from \"./clone.js\";\n\n/**\n * Generic toString() method, outputs a color(spaceId ...coords) function, a functional syntax, or custom formats defined by the color space\n * @param {Object} options\n * @param {number} options.precision - Significant digits\n * @param {boolean} options.inGamut - Adjust coordinates to fit in gamut first? [default: false]\n */\nexport default function serialize (color, {\n\tprecision = defaults.precision,\n\tformat = \"default\",\n\tinGamut = true,\n\t...customOptions\n} = {}) {\n\tlet ret;\n\n\tcolor = getColor(color);\n\n\tlet formatId = format;\n\tformat = color.space.getFormat(format)\n\t\t ?? color.space.getFormat(\"default\")\n\t\t ?? ColorSpace.DEFAULT_FORMAT;\n\n\tinGamut ||= format.toGamut;\n\n\tlet coords = color.coords;\n\n\t// Convert NaN to zeros to have a chance at a valid CSS color\n\t// Also convert -0 to 0\n\t// This also clones it so we can manipulate it\n\tcoords = coords.map(c => c? c : 0);\n\n\tif (inGamut && !checkInGamut(color)) {\n\t\tcoords = toGamut(clone(color), inGamut === true? undefined : inGamut).coords;\n\t}\n\n\tif (format.type === \"custom\") {\n\t\tcustomOptions.precision = precision;\n\n\t\tif (format.serialize) {\n\t\t\tret = format.serialize(coords, color.alpha, customOptions);\n\t\t}\n\t\telse {\n\t\t\tthrow new TypeError(`format ${formatId} can only be used to parse colors, not for serialization`);\n\t\t}\n\t}\n\telse {\n\t\t// Functional syntax\n\t\tlet name = format.name || \"color\";\n\n\t\tif (format.serializeCoords) {\n\t\t\tcoords = format.serializeCoords(coords, precision);\n\t\t}\n\t\telse {\n\t\t\tif (precision !== null) {\n\t\t\t\tcoords = coords.map(c => util.toPrecision(c, precision));\n\t\t\t}\n\t\t}\n\n\t\tlet args = [...coords];\n\n\t\tif (name === \"color\") {\n\t\t\t// If output is a color() function, add colorspace id as first argument\n\t\t\tlet cssId = format.id || format.ids?.[0] || color.space.id;\n\t\t\targs.unshift(cssId);\n\t\t}\n\n\t\tlet alpha = color.alpha;\n\t\tif (precision !== null) {\n\t\t\talpha = util.toPrecision(alpha, precision);\n\t\t}\n\n\t\tlet strAlpha = color.alpha < 1? ` ${format.commas? \",\" : \"/\"} ${alpha}` : \"\";\n\t\tret = `${name}(${args.join(format.commas? \", \" : \" \")}${strAlpha})`;\n\t}\n\n\treturn ret;\n}","import RGBColorSpace from \"../rgbspace.js\";\n\n// convert an array of linear-light rec2020 values to CIE XYZ\n// using D65 (no chromatic adaptation)\n// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n// 0 is actually calculated as 4.994106574466076e-17\nconst toXYZ_M = [\n\t[ 0.6369580483012914, 0.14461690358620832, 0.1688809751641721 ],\n\t[ 0.2627002120112671, 0.6779980715188708, 0.05930171646986196 ],\n\t[ 0.000000000000000, 0.028072693049087428, 1.060985057710791 ]\n];\n\n// from ITU-R BT.2124-0 Annex 2 p.3\nconst fromXYZ_M = [\n\t[ 1.716651187971268, -0.355670783776392, -0.253366281373660 ],\n\t[ -0.666684351832489, 1.616481236634939, 0.0157685458139111 ],\n\t[ 0.017639857445311, -0.042770613257809, 0.942103121235474 ]\n]\n\nexport default new RGBColorSpace({\n\tid: \"rec2020-linear\",\n\tname: \"Linear REC.2020\",\n\twhite: \"D65\",\n\ttoXYZ_M,\n\tfromXYZ_M\n});\n","import RGBColorSpace from \"../rgbspace.js\";\nimport REC2020Linear from \"./rec2020-linear.js\";\n// import sRGB from \"./srgb.js\";\n\nconst α = 1.09929682680944;\nconst β = 0.018053968510807;\n\nexport default new RGBColorSpace({\n\tid: \"rec2020\",\n\tname: \"REC.2020\",\n\tbase: REC2020Linear,\n\t// Non-linear transfer function from Rec. ITU-R BT.2020-2 table 4\n\ttoBase (RGB) {\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val < β * 4.5 ) {\n\t\t\t\treturn val / 4.5;\n\t\t\t}\n\n\t\t\treturn Math.pow((val + α -1 ) / α, 1/0.45);\n\t\t});\n\t},\n\tfromBase (RGB) {\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val >= β ) {\n\t\t\t\treturn α * Math.pow(val, 0.45) - (α - 1);\n\t\t\t}\n\n\t\t\treturn 4.5 * val;\n\t\t});\n\t},\n\tformats: {\n\t\tcolor: {},\n\t}\n});\n","import RGBColorSpace from \"../rgbspace.js\";\n\nconst toXYZ_M = [\n\t[0.4865709486482162, 0.26566769316909306, 0.1982172852343625],\n\t[0.2289745640697488, 0.6917385218365064, 0.079286914093745],\n\t[0.0000000000000000, 0.04511338185890264, 1.043944368900976]\n];\n\nconst fromXYZ_M = [\n\t[ 2.493496911941425, -0.9313836179191239, -0.40271078445071684],\n\t[-0.8294889695615747, 1.7626640603183463, 0.023624685841943577],\n\t[ 0.03584583024378447, -0.07617238926804182, 0.9568845240076872]\n]\n\nexport default new RGBColorSpace({\n\tid: \"p3-linear\",\n\tname: \"Linear P3\",\n\twhite: \"D65\",\n\ttoXYZ_M,\n\tfromXYZ_M\n});\n","import RGBColorSpace from \"../rgbspace.js\";\n\n// This is the linear-light version of sRGB\n// as used for example in SVG filters\n// or in Canvas\n\n// This matrix was calculated directly from the RGB and white chromaticities\n// when rounded to 8 decimal places, it agrees completely with the official matrix\n// see https://github.com/w3c/csswg-drafts/issues/5922\nconst toXYZ_M = [\n\t[ 0.41239079926595934, 0.357584339383878, 0.1804807884018343 ],\n\t[ 0.21263900587151027, 0.715168678767756, 0.07219231536073371 ],\n\t[ 0.01933081871559182, 0.11919477979462598, 0.9505321522496607 ]\n];\n\n// This matrix is the inverse of the above;\n// again it agrees with the official definition when rounded to 8 decimal places\nconst fromXYZ_M = [\n\t[ 3.2409699419045226, -1.537383177570094, -0.4986107602930034 ],\n\t[ -0.9692436362808796, 1.8759675015077202, 0.04155505740717559 ],\n\t[ 0.05563007969699366, -0.20397695888897652, 1.0569715142428786 ]\n];\n\nexport default new RGBColorSpace({\n\tid: \"srgb-linear\",\n\tname: \"Linear sRGB\",\n\twhite: \"D65\",\n\ttoXYZ_M,\n\tfromXYZ_M,\n\tformats: {\n\t\tcolor: {}\n\t},\n});\n","/* List of CSS color keywords\n * Note that this does not include currentColor, transparent,\n * or system colors\n */\n\n// To produce: Visit https://www.w3.org/TR/css-color-4/#named-colors\n// and run in the console:\n// copy($$(\"tr\", $(\".named-color-table tbody\")).map(tr => `\"${tr.cells[2].textContent.trim()}\": [${tr.cells[4].textContent.trim().split(/\\s+/).map(c => c === \"0\"? \"0\" : c === \"255\"? \"1\" : c + \" / 255\").join(\", \")}]`).join(\",\\n\"))\nexport default {\n\t\"aliceblue\": [240 / 255, 248 / 255, 1],\n\t\"antiquewhite\": [250 / 255, 235 / 255, 215 / 255],\n\t\"aqua\": [0, 1, 1],\n\t\"aquamarine\": [127 / 255, 1, 212 / 255],\n\t\"azure\": [240 / 255, 1, 1],\n\t\"beige\": [245 / 255, 245 / 255, 220 / 255],\n\t\"bisque\": [1, 228 / 255, 196 / 255],\n\t\"black\": [0, 0, 0],\n\t\"blanchedalmond\": [1, 235 / 255, 205 / 255],\n\t\"blue\": [0, 0, 1],\n\t\"blueviolet\": [138 / 255, 43 / 255, 226 / 255],\n\t\"brown\": [165 / 255, 42 / 255, 42 / 255],\n\t\"burlywood\": [222 / 255, 184 / 255, 135 / 255],\n\t\"cadetblue\": [95 / 255, 158 / 255, 160 / 255],\n\t\"chartreuse\": [127 / 255, 1, 0],\n\t\"chocolate\": [210 / 255, 105 / 255, 30 / 255],\n\t\"coral\": [1, 127 / 255, 80 / 255],\n\t\"cornflowerblue\": [100 / 255, 149 / 255, 237 / 255],\n\t\"cornsilk\": [1, 248 / 255, 220 / 255],\n\t\"crimson\": [220 / 255, 20 / 255, 60 / 255],\n\t\"cyan\": [0, 1, 1],\n\t\"darkblue\": [0, 0, 139 / 255],\n\t\"darkcyan\": [0, 139 / 255, 139 / 255],\n\t\"darkgoldenrod\": [184 / 255, 134 / 255, 11 / 255],\n\t\"darkgray\": [169 / 255, 169 / 255, 169 / 255],\n\t\"darkgreen\": [0, 100 / 255, 0],\n\t\"darkgrey\": [169 / 255, 169 / 255, 169 / 255],\n\t\"darkkhaki\": [189 / 255, 183 / 255, 107 / 255],\n\t\"darkmagenta\": [139 / 255, 0, 139 / 255],\n\t\"darkolivegreen\": [85 / 255, 107 / 255, 47 / 255],\n\t\"darkorange\": [1, 140 / 255, 0],\n\t\"darkorchid\": [153 / 255, 50 / 255, 204 / 255],\n\t\"darkred\": [139 / 255, 0, 0],\n\t\"darksalmon\": [233 / 255, 150 / 255, 122 / 255],\n\t\"darkseagreen\": [143 / 255, 188 / 255, 143 / 255],\n\t\"darkslateblue\": [72 / 255, 61 / 255, 139 / 255],\n\t\"darkslategray\": [47 / 255, 79 / 255, 79 / 255],\n\t\"darkslategrey\": [47 / 255, 79 / 255, 79 / 255],\n\t\"darkturquoise\": [0, 206 / 255, 209 / 255],\n\t\"darkviolet\": [148 / 255, 0, 211 / 255],\n\t\"deeppink\": [1, 20 / 255, 147 / 255],\n\t\"deepskyblue\": [0, 191 / 255, 1],\n\t\"dimgray\": [105 / 255, 105 / 255, 105 / 255],\n\t\"dimgrey\": [105 / 255, 105 / 255, 105 / 255],\n\t\"dodgerblue\": [30 / 255, 144 / 255, 1],\n\t\"firebrick\": [178 / 255, 34 / 255, 34 / 255],\n\t\"floralwhite\": [1, 250 / 255, 240 / 255],\n\t\"forestgreen\": [34 / 255, 139 / 255, 34 / 255],\n\t\"fuchsia\": [1, 0, 1],\n\t\"gainsboro\": [220 / 255, 220 / 255, 220 / 255],\n\t\"ghostwhite\": [248 / 255, 248 / 255, 1],\n\t\"gold\": [1, 215 / 255, 0],\n\t\"goldenrod\": [218 / 255, 165 / 255, 32 / 255],\n\t\"gray\": [128 / 255, 128 / 255, 128 / 255],\n\t\"green\": [0, 128 / 255, 0],\n\t\"greenyellow\": [173 / 255, 1, 47 / 255],\n\t\"grey\": [128 / 255, 128 / 255, 128 / 255],\n\t\"honeydew\": [240 / 255, 1, 240 / 255],\n\t\"hotpink\": [1, 105 / 255, 180 / 255],\n\t\"indianred\": [205 / 255, 92 / 255, 92 / 255],\n\t\"indigo\": [75 / 255, 0, 130 / 255],\n\t\"ivory\": [1, 1, 240 / 255],\n\t\"khaki\": [240 / 255, 230 / 255, 140 / 255],\n\t\"lavender\": [230 / 255, 230 / 255, 250 / 255],\n\t\"lavenderblush\": [1, 240 / 255, 245 / 255],\n\t\"lawngreen\": [124 / 255, 252 / 255, 0],\n\t\"lemonchiffon\": [1, 250 / 255, 205 / 255],\n\t\"lightblue\": [173 / 255, 216 / 255, 230 / 255],\n\t\"lightcoral\": [240 / 255, 128 / 255, 128 / 255],\n\t\"lightcyan\": [224 / 255, 1, 1],\n\t\"lightgoldenrodyellow\": [250 / 255, 250 / 255, 210 / 255],\n\t\"lightgray\": [211 / 255, 211 / 255, 211 / 255],\n\t\"lightgreen\": [144 / 255, 238 / 255, 144 / 255],\n\t\"lightgrey\": [211 / 255, 211 / 255, 211 / 255],\n\t\"lightpink\": [1, 182 / 255, 193 / 255],\n\t\"lightsalmon\": [1, 160 / 255, 122 / 255],\n\t\"lightseagreen\": [32 / 255, 178 / 255, 170 / 255],\n\t\"lightskyblue\": [135 / 255, 206 / 255, 250 / 255],\n\t\"lightslategray\": [119 / 255, 136 / 255, 153 / 255],\n\t\"lightslategrey\": [119 / 255, 136 / 255, 153 / 255],\n\t\"lightsteelblue\": [176 / 255, 196 / 255, 222 / 255],\n\t\"lightyellow\": [1, 1, 224 / 255],\n\t\"lime\": [0, 1, 0],\n\t\"limegreen\": [50 / 255, 205 / 255, 50 / 255],\n\t\"linen\": [250 / 255, 240 / 255, 230 / 255],\n\t\"magenta\": [1, 0, 1],\n\t\"maroon\": [128 / 255, 0, 0],\n\t\"mediumaquamarine\": [102 / 255, 205 / 255, 170 / 255],\n\t\"mediumblue\": [0, 0, 205 / 255],\n\t\"mediumorchid\": [186 / 255, 85 / 255, 211 / 255],\n\t\"mediumpurple\": [147 / 255, 112 / 255, 219 / 255],\n\t\"mediumseagreen\": [60 / 255, 179 / 255, 113 / 255],\n\t\"mediumslateblue\": [123 / 255, 104 / 255, 238 / 255],\n\t\"mediumspringgreen\": [0, 250 / 255, 154 / 255],\n\t\"mediumturquoise\": [72 / 255, 209 / 255, 204 / 255],\n\t\"mediumvioletred\": [199 / 255, 21 / 255, 133 / 255],\n\t\"midnightblue\": [25 / 255, 25 / 255, 112 / 255],\n\t\"mintcream\": [245 / 255, 1, 250 / 255],\n\t\"mistyrose\": [1, 228 / 255, 225 / 255],\n\t\"moccasin\": [1, 228 / 255, 181 / 255],\n\t\"navajowhite\": [1, 222 / 255, 173 / 255],\n\t\"navy\": [0, 0, 128 / 255],\n\t\"oldlace\": [253 / 255, 245 / 255, 230 / 255],\n\t\"olive\": [128 / 255, 128 / 255, 0],\n\t\"olivedrab\": [107 / 255, 142 / 255, 35 / 255],\n\t\"orange\": [1, 165 / 255, 0],\n\t\"orangered\": [1, 69 / 255, 0],\n\t\"orchid\": [218 / 255, 112 / 255, 214 / 255],\n\t\"palegoldenrod\": [238 / 255, 232 / 255, 170 / 255],\n\t\"palegreen\": [152 / 255, 251 / 255, 152 / 255],\n\t\"paleturquoise\": [175 / 255, 238 / 255, 238 / 255],\n\t\"palevioletred\": [219 / 255, 112 / 255, 147 / 255],\n\t\"papayawhip\": [1, 239 / 255, 213 / 255],\n\t\"peachpuff\": [1, 218 / 255, 185 / 255],\n\t\"peru\": [205 / 255, 133 / 255, 63 / 255],\n\t\"pink\": [1, 192 / 255, 203 / 255],\n\t\"plum\": [221 / 255, 160 / 255, 221 / 255],\n\t\"powderblue\": [176 / 255, 224 / 255, 230 / 255],\n\t\"purple\": [128 / 255, 0, 128 / 255],\n\t\"rebeccapurple\": [102 / 255, 51 / 255, 153 / 255],\n\t\"red\": [1, 0, 0],\n\t\"rosybrown\": [188 / 255, 143 / 255, 143 / 255],\n\t\"royalblue\": [65 / 255, 105 / 255, 225 / 255],\n\t\"saddlebrown\": [139 / 255, 69 / 255, 19 / 255],\n\t\"salmon\": [250 / 255, 128 / 255, 114 / 255],\n\t\"sandybrown\": [244 / 255, 164 / 255, 96 / 255],\n\t\"seagreen\": [46 / 255, 139 / 255, 87 / 255],\n\t\"seashell\": [1, 245 / 255, 238 / 255],\n\t\"sienna\": [160 / 255, 82 / 255, 45 / 255],\n\t\"silver\": [192 / 255, 192 / 255, 192 / 255],\n\t\"skyblue\": [135 / 255, 206 / 255, 235 / 255],\n\t\"slateblue\": [106 / 255, 90 / 255, 205 / 255],\n\t\"slategray\": [112 / 255, 128 / 255, 144 / 255],\n\t\"slategrey\": [112 / 255, 128 / 255, 144 / 255],\n\t\"snow\": [1, 250 / 255, 250 / 255],\n\t\"springgreen\": [0, 1, 127 / 255],\n\t\"steelblue\": [70 / 255, 130 / 255, 180 / 255],\n\t\"tan\": [210 / 255, 180 / 255, 140 / 255],\n\t\"teal\": [0, 128 / 255, 128 / 255],\n\t\"thistle\": [216 / 255, 191 / 255, 216 / 255],\n\t\"tomato\": [1, 99 / 255, 71 / 255],\n\t\"turquoise\": [64 / 255, 224 / 255, 208 / 255],\n\t\"violet\": [238 / 255, 130 / 255, 238 / 255],\n\t\"wheat\": [245 / 255, 222 / 255, 179 / 255],\n\t\"white\": [1, 1, 1],\n\t\"whitesmoke\": [245 / 255, 245 / 255, 245 / 255],\n\t\"yellow\": [1, 1, 0],\n\t\"yellowgreen\": [154 / 255, 205 / 255, 50 / 255]\n};\n","import RGBColorSpace from \"../rgbspace.js\";\nimport sRGBLinear from \"./srgb-linear.js\";\nimport KEYWORDS from \"../keywords.js\";\n\nlet coordGrammar = Array(3).fill(\" | [0, 255]\");\n\nexport default new RGBColorSpace({\n\tid: \"srgb\",\n\tname: \"sRGB\",\n\tbase: sRGBLinear,\n\tfromBase: rgb => {\n\t\t// convert an array of linear-light sRGB values in the range 0.0-1.0\n\t\t// to gamma corrected form\n\t\t// https://en.wikipedia.org/wiki/SRGB\n\t\treturn rgb.map(val => {\n\t\t\tlet sign = val < 0? -1 : 1;\n\t\t\tlet abs = val * sign;\n\n\t\t\tif (abs > 0.0031308) {\n\t\t\t\treturn sign * (1.055 * (abs ** (1/2.4)) - 0.055);\n\t\t\t}\n\n\t\t\treturn 12.92 * val;\n\t\t});\n\t},\n\ttoBase: rgb => {\n\t\t// convert an array of sRGB values in the range 0.0 - 1.0\n\t\t// to linear light (un-companded) form.\n\t\t// https://en.wikipedia.org/wiki/SRGB\n\t\treturn rgb.map(val => {\n\t\t\tlet sign = val < 0? -1 : 1;\n\t\t\tlet abs = val * sign;\n\n\t\t\tif (abs < 0.04045) {\n\t\t\t\treturn val / 12.92;\n\t\t\t}\n\n\t\t\treturn sign * (((abs + 0.055) / 1.055) ** 2.4);\n\t\t});\n\t},\n\tformats: {\n\t\t\"rgb\": {\n\t\t\tcoords: coordGrammar,\n\t\t},\n\t\t\"color\": { /* use defaults */ },\n\t\t\"rgba\": {\n\t\t\tcoords: coordGrammar,\n\t\t\tcommas: true,\n\t\t\tlastAlpha: true,\n\t\t},\n\t\t\"hex\": {\n\t\t\ttype: \"custom\",\n\t\t\ttoGamut: true,\n\t\t\ttest: str => /^#([a-f0-9]{3,4}){1,2}$/i.test(str),\n\t\t\tparse (str) {\n\t\t\t\tif (str.length <= 5) {\n\t\t\t\t\t// #rgb or #rgba, duplicate digits\n\t\t\t\t\tstr = str.replace(/[a-f0-9]/gi, \"$&$&\");\n\t\t\t\t}\n\n\t\t\t\tlet rgba = [];\n\t\t\t\tstr.replace(/[a-f0-9]{2}/gi, component => {\n\t\t\t\t\trgba.push(parseInt(component, 16) / 255);\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tspaceId: \"srgb\",\n\t\t\t\t\tcoords: rgba.slice(0, 3),\n\t\t\t\t\talpha: rgba.slice(3)[0]\n\t\t\t\t};\n\t\t\t},\n\t\t\tserialize: (coords, alpha, {\n\t\t\t\tcollapse = true // collapse to 3-4 digit hex when possible?\n\t\t\t} = {}) => {\n\t\t\t\tif (alpha < 1) {\n\t\t\t\t\tcoords.push(alpha);\n\t\t\t\t}\n\n\t\t\t\tcoords = coords.map(c => Math.round(c * 255));\n\n\t\t\t\tlet collapsible = collapse && coords.every(c => c % 17 === 0);\n\n\t\t\t\tlet hex = coords.map(c => {\n\t\t\t\t\tif (collapsible) {\n\t\t\t\t\t\treturn (c/17).toString(16);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn c.toString(16).padStart(2, \"0\");\n\t\t\t\t}).join(\"\");\n\n\t\t\t\treturn \"#\" + hex;\n\t\t\t}\n\t\t},\n\t\t\"keyword\": {\n\t\t\ttype: \"custom\",\n\t\t\ttest: str => /^[a-z]+$/i.test(str),\n\t\t\tparse (str) {\n\t\t\t\tstr = str.toLowerCase();\n\t\t\t\tlet ret = {spaceId: \"srgb\", coords: null, alpha: 1};\n\n\t\t\t\tif (str === \"transparent\") {\n\t\t\t\t\tret.coords = KEYWORDS.black;\n\t\t\t\t\tret.alpha = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tret.coords = KEYWORDS[str];\n\t\t\t\t}\n\n\t\t\t\tif (ret.coords) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}\n});\n","import RGBColorSpace from \"../rgbspace.js\";\nimport P3Linear from \"./p3-linear.js\";\nimport sRGB from \"./srgb.js\";\n\nexport default new RGBColorSpace({\n\tid: \"p3\",\n\tname: \"P3\",\n\tbase: P3Linear,\n\t// Gamma encoding/decoding is the same as sRGB\n\tfromBase: sRGB.fromBase,\n\ttoBase: sRGB.toBase,\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"display-p3\",\n\t\t}\n\t},\n});\n","import * as util from \"./util.js\";\nimport ColorSpace from \"./space.js\";\nimport defaults from \"./defaults.js\";\nimport getColor from \"./getColor.js\";\nimport to from \"./to.js\";\nimport checkInGamut from \"./inGamut.js\";\nimport toGamut from \"./toGamut.js\";\nimport clone from \"./clone.js\";\nimport serialize from \"./serialize.js\";\nimport REC2020 from \"./spaces/rec2020.js\";\nimport P3 from \"./spaces/p3.js\";\nimport Lab from \"./spaces/lab.js\";\nimport sRGB from \"./spaces/srgb.js\";\n\n// Default space for CSS output. Code in Color.js makes this wider if there's a DOM available\ndefaults.display_space = sRGB;\n\nif (typeof CSS !== \"undefined\" && CSS.supports) {\n\t// Find widest supported color space for CSS\n\tfor (let space of [Lab, REC2020, P3]) {\n\t\tlet coords = space.getMinCoords();\n\t\tlet color = {space, coords, alpha: 1};\n\t\tlet str = serialize(color);\n\n\t\tif (CSS.supports(\"color\", str)) {\n\t\t\tdefaults.display_space = space;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * Returns a serialization of the color that can actually be displayed in the browser.\n * If the default serialization can be displayed, it is returned.\n * Otherwise, the color is converted to Lab, REC2020, or P3, whichever is the widest supported.\n * In Node.js, this is basically equivalent to `serialize()` but returns a `String` object instead.\n *\n * @export\n * @param {{space, coords} | Color | string} color\n * @param {*} [options={}] Options to be passed to serialize()\n * @param {ColorSpace | string} [options.space = defaults.display_space] Color space to use for serialization if default is not supported\n * @returns {String} String object containing the serialized color with a color property containing the converted color (or the original, if no conversion was necessary)\n */\nexport default function display (color, {space = defaults.display_space, ...options} = {}) {\n\tlet ret = serialize(color, options);\n\n\tif (typeof CSS === \"undefined\" || CSS.supports(\"color\", ret) || !defaults.display_space) {\n\t\tret = new String(ret);\n\t\tret.color = color;\n\t}\n\telse {\n\t\t// If we're here, what we were about to output is not supported\n\t\t// Fall back to fallback space\n\t\tlet fallbackColor = to(color, space);\n\t\tret = new String(serialize(fallbackColor, options));\n\t\tret.color = fallbackColor;\n\t}\n\n\treturn ret;\n}","import ColorSpace from \"./space.js\";\n\n/**\n * Euclidean distance of colors in an arbitrary color space\n */\nexport default function distance(color1, color2, space = \"lab\") {\n\tspace = ColorSpace.get(space);\n\n\tlet coords1 = space.from(color1);\n\tlet coords2 = space.from(color2);\n\n\treturn Math.sqrt(coords1.reduce((acc, c1, i) => {\n\t\tlet c2 = coords2[i];\n\t\tif (isNaN(c1) || isNaN(c2)) {\n\t\t\treturn acc;\n\t\t}\n\n\t\treturn acc + (c2 - c1) ** 2;\n\t}, 0));\n}","/**\n * Relative luminance\n */\nimport get from \"./get.js\";\nimport xyz_d65 from \"./spaces/xyz-d65.js\";\n\nexport function getLuminance(color) {\n\treturn get(color, [xyz_d65, \"y\"]);\n}\n\nexport function setLuminance(color) {\n\tset(color, [xyz_d65, \"y\"], value);\n}\n\nexport function register(Color) {\n\tObject.defineProperty(Color.prototype, \"luminance\", {\n\t\tget () {\n\t\t\treturn getLuminance(this);\n\t\t},\n\t\tset (value) {\n\t\t\tsetLuminance(this, value);\n\t\t}\n\t});\n}","// APCA 0.0.98G\n// https://github.com/Myndex/apca-w3\n// see also https://github.com/w3c/silver/issues/643\n\nimport getColor from \"../getColor.js\";\nimport to from \"../to.js\";\n\n// exponents\nconst normBG = 0.56;\nconst normTXT = 0.57;\nconst revTXT = 0.62;\nconst revBG = 0.65;\n\n// clamps\nconst blkThrs = 0.022;\nconst blkClmp = 1.414;\nconst loClip = 0.1;\nconst deltaYmin = 0.0005;\n\n// scalers\n// see https://github.com/w3c/silver/issues/645\nconst scaleBoW = 1.14;\nconst loBoWoffset = 0.027;\nconst scaleWoB= 1.14;\nconst loWoBoffset = 0.027;\n\nfunction fclamp (Y) {\n\tif (Y >= blkThrs) return Y;\n\treturn Y + (blkThrs - Y) ** blkClmp;\n}\n\nfunction linearize (val) {\n\tlet sign = val < 0? -1 : 1;\n\tlet abs = Math.abs(val);\n\treturn sign * Math.pow(abs, 2.4);\n}\n\n// Not symmetric, requires a foreground (text) color, and a background color\nexport default function contrastAPCA (background, foreground) {\n\tforeground = getColor(foreground);\n\tbackground = getColor(background);\n\n\tlet S;\n\tlet C;\n\tlet Sapc;\n\n\t// Myndex as-published, assumes sRGB inputs\n\tlet R, G, B;\n\n\tforeground = to(foreground, 'srgb');\n\t// Should these be clamped to in-gamut values?\n\n\t// Calculates \"screen luminance\" with non-standard simple gamma EOTF\n\t// weights should be from CSS Color 4, not the ones here which are via Myndex and copied from Lindbloom\n\t[R, G, B] = foreground.coords;\n\tlet lumTxt = linearize(R) * 0.2126729 + linearize(G) * 0.7151522 + linearize(B) * 0.0721750;\n\n\tbackground = to(background, 'srgb');\n\t[R, G, B] = background.coords;\n\tlet lumBg = linearize(R) * 0.2126729 + linearize(G) * 0.7151522 + linearize(B) * 0.0721750;\n\n\t// toe clamping of very dark values to account for flare\n\tlet Ytxt = fclamp(lumTxt);\n\tlet Ybg = fclamp(lumBg);\n\n\t// are we \"Black on White\" (dark on light), or light on dark?\n\tlet BoW = Ybg > Ytxt;\n\n\t// why is this a delta, when Y is not perceptually uniform?\n\tif (Math.abs(Ybg - Ytxt) < deltaYmin) {\n\t\tC = 0;\n\t}\n\telse {\n\t\tif (BoW) {\n\t\t\t// dark text on light background\n\t\t\tS = Ybg ** normBG - Ytxt ** normTXT;\n\t\t\tC = S * scaleBoW;\n\t\t} else {\n\t\t\t// light text on dark background\n\t\t\tS = Ybg ** revBG - Ytxt ** revTXT;\n\t\t\tC = S * scaleWoB;\n\t\t}\n\t}\n\tif (Math.abs(C) < loClip) {\n\t\tSapc = 0;\n\t}\n\telse if (C > 0) {\n\t\t// not clear whether Woffset is loBoWoffset or loWoBoffset\n\t\t// but they have the same value\n\t\tSapc = C - loBoWoffset;\n\t}\n\telse {\n\t\tSapc = C + loBoWoffset;\n\t}\n\n\treturn Sapc * 100;\n}","// WCAG 2.0 contrast https://www.w3.org/TR/WCAG20-TECHS/G18.html\n// Simple contrast, with fixed 5% viewing flare contribution\n// Symmetric, does not matter which is foreground and which is background\n\nimport getColor from \"../getColor.js\";\nimport {getLuminance} from \"../luminance.js\";\n\nexport default function contrastWCAG21 (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet Y1 = Math.max(getLuminance(color1), 0);\n\tlet Y2 = Math.max(getLuminance(color2), 0);\n\n\tif (Y2 > Y1) {\n\t\t[Y1, Y2] = [Y2, Y1];\n\t}\n\n\treturn (Y1 + .05) / (Y2 + .05);\n};","// Michelson luminance contrast\n// the relation between the spread and the sum of the two luminances\n// Symmetric, does not matter which is foreground and which is background\n// No black level compensation for flare.\n\nimport getColor from \"../getColor.js\";\nimport {getLuminance} from \"../luminance.js\";\n\nexport default function contrastMichelson (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet Y1 = Math.max(getLuminance(color1), 0);\n\tlet Y2 = Math.max(getLuminance(color2), 0);\n\n\tif (Y2 > Y1) {\n\t\t[Y1, Y2] = [Y2, Y1];\n\t}\n\n\tlet denom = (Y1 + Y2);\n\treturn denom === 0 ? 0 : (Y1 - Y2) / denom;\n};","// Weber luminance contrast\n// The difference between the two luminances divided by the lower luminance\n// Symmetric, does not matter which is foreground and which is background\n// No black level compensation for flare.\n\nimport getColor from \"../getColor.js\";\nimport {getLuminance} from \"../luminance.js\";\n\nexport default function contrastWeber (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet Y1 = Math.max(getLuminance(color1), 0);\n\tlet Y2 = Math.max(getLuminance(color2), 0);\n\n\tif (Y2 > Y1) {\n\t\t[Y1, Y2] = [Y2, Y1];\n\t}\n\n\treturn Y2 === 0 ? 0 : (Y1 - Y2) / Y2;\n};","// CIE Lightness difference, as used by Google Material Design\n// Google HCT Tone is the same as CIE Lightness\n// https://material.io/blog/science-of-color-design\n\nimport getColor from \"../getColor.js\";\nimport get from \"../get.js\";\nimport lab from \"../spaces/lab.js\";\n\nexport default function contrastLstar (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\tlet L1 = get(color1, [lab, \"l\"]);\n\tlet L2 = get(color2, [lab, \"l\"]);\n\n\treturn Math.abs(L1 - L2);\n};\n","import xyz_d65 from \"./spaces/xyz-d65.js\";\nimport getAll from \"./getAll.js\";\n\n// Chromaticity coordinates\nexport function uv (color) {\n\tlet [X, Y, Z] = getAll(color, xyz_d65);\n\tlet denom = X + 15 * Y + 3 * Z;\n\treturn [4 * X / denom, 9 * Y / denom];\n}\n\nexport function xy (color) {\n\tlet [X, Y, Z] = getAll(color, xyz_d65);\n\tlet sum = X + Y + Z;\n\treturn [X / sum, Y / sum];\n}\n\nexport function register(Color) {\n\t// no setters, as lightness information is lost\n\t// when converting color to chromaticity\n\tObject.defineProperty(Color.prototype, \"uv\", {\n\t\tget () {\n\t\t\treturn uv(this);\n\t\t}\n\t});\n\n\tObject.defineProperty(Color.prototype, \"xy\", {\n\t\tget () {\n\t\t\treturn xy(this);\n\t\t}\n\t});\n}\n","import lab from \"../spaces/lab.js\";\nimport lch from \"../spaces/lch.js\";\n\n// More accurate color-difference formulae\n// than the simple 1976 Euclidean distance in Lab\n\n// CMC by the Color Measurement Committee of the\n// Bradford Society of Dyeists and Colorsts, 1994.\n// Uses LCH rather than Lab,\n// with different weights for L, C and H differences\n// A nice increase in accuracy for modest increase in complexity\nconst π = Math.PI;\nconst d2r = π / 180;\n\nexport default function (color, sample, {l = 2, c = 1} = {}) {\n\t// Given this color as the reference\n\t// and a sample,\n\t// calculate deltaE CMC.\n\n\t// This implementation assumes the parametric\n\t// weighting factors l:c are 2:1\n\t// which is typical for non-textile uses.\n\n\tlet [L1, a1, b1] = lab.from(color);\n\tlet [, C1, H1] = lch.from(lab, [L1, a1, b1]);\n\tlet [L2, a2, b2] = lab.from(sample);\n\tlet C2 = lch.from(lab, [L2, a2, b2])[1];\n\n\t// let [L1, a1, b1] = color.getAll(lab);\n\t// let C1 = color.get(\"lch.c\");\n\t// let H1 = color.get(\"lch.h\");\n\t// let [L2, a2, b2] = sample.getAll(lab);\n\t// let C2 = sample.get(\"lch.c\");\n\n\t// Check for negative Chroma,\n\t// which might happen through\n\t// direct user input of LCH values\n\n\tif (C1 < 0) {\n\t\tC1 = 0;\n\t}\n\tif (C2 < 0) {\n\t\tC2 = 0;\n\t}\n\n\t// we don't need H2 as ΔH is calculated from Δa, Δb and ΔC\n\n\t// Lightness and Chroma differences\n\t// These are (color - sample), unlike deltaE2000\n\tlet ΔL = L1 - L2;\n\tlet ΔC = C1 - C2;\n\n\tlet Δa = a1 - a2;\n\tlet Δb = b1 - b2;\n\n\t// weighted Hue difference, less for larger Chroma difference\n\n\tlet H2 = (Δa ** 2) + (Δb ** 2) - (ΔC ** 2);\n\t// due to roundoff error it is possible that, for zero a and b,\n\t// ΔC > Δa + Δb is 0, resulting in attempting\n\t// to take the square root of a negative number\n\n\t// trying instead the equation from Industrial Color Physics\n\t// By Georg A. Klein\n\n\t// let ΔH = ((a1 * b2) - (a2 * b1)) / Math.sqrt(0.5 * ((C2 * C1) + (a2 * a1) + (b2 * b1)));\n\t// console.log({ΔH});\n\t// This gives the same result to 12 decimal places\n\t// except it sometimes NaNs when trying to root a negative number\n\n\t// let ΔH = Math.sqrt(H2); we never actually use the root, it gets squared again!!\n\n\t// positional corrections to the lack of uniformity of CIELAB\n\t// These are all trying to make JND ellipsoids more like spheres\n\n\t// SL Lightness crispening factor, depends entirely on L1 not L2\n\tlet SL = 0.511;\t// linear portion of the Y to L transfer function\n\tif (L1 >= 16) {\t// cubic portion\n\t\tSL = (0.040975 * L1) / (1 + 0.01765 * L1);\n\t}\n\n\t// SC Chroma factor\n\tlet SC = ((0.0638 * C1) / (1 + 0.0131 * C1)) + 0.638;\n\n\t// Cross term T for blue non-linearity\n\tlet T;\n\tif ( Number.isNaN(H1)) {\n\t\tH1 = 0;\n\t}\n\n\tif (H1 >= 164 && H1 <= 345) {\n\t\tT = 0.56 + Math.abs(0.2 * Math.cos((H1 + 168) * d2r));\n\t}\n\telse {\n\t\tT = 0.36 + Math.abs(0.4 * Math.cos((H1 + 35) * d2r));\n\t}\n\t// console.log({T});\n\n\t// SH Hue factor also depends on C1,\n\tlet C4 = Math.pow(C1, 4);\n\tlet F = Math.sqrt(C4 / (C4 + 1900));\n\tlet SH = SC * ((F * T) + 1 - F);\n\n\t// Finally calculate the deltaE, term by term as root sume of squares\n\tlet dE = (ΔL / (l * SL)) ** 2;\n\tdE += (ΔC / (c * SC)) ** 2;\n\tdE += (H2 / (SH ** 2));\n\t// dE += (ΔH / SH) ** 2;\n\treturn Math.sqrt(dE);\n\t// Yay!!!\n};","import ColorSpace from \"../space.js\";\nimport XYZ_D65 from \"./xyz-d65.js\";\n\nconst Yw = 203;\t// absolute luminance of media white\n\nexport default new ColorSpace({\n// Absolute CIE XYZ, with a D65 whitepoint,\n// as used in most HDR colorspaces as a starting point.\n// SDR spaces are converted per BT.2048\n// so that diffuse, media white is 203 cd/m²\n\tid: \"xyz-abs-d65\",\n\tname: \"Absolute XYZ D65\",\n\tcoords: {\n\t\tx: {\n\t\t\trefRange: [0, 9504.7],\n\t\t\tname: \"Xa\",\n\t\t},\n\t\ty: {\n\t\t\trefRange: [0, 10000],\n\t\t\tname: \"Ya\",\n\t\t},\n\t\tz: {\n\t\t\trefRange: [0, 10888.3],\n\t\t\tname: \"Za\",\n\t\t}\n\t},\n\n\tbase: XYZ_D65,\n\tfromBase (XYZ) {\n\t\t// Make XYZ absolute, not relative to media white\n\t\t// Maximum luminance in PQ is 10,000 cd/m²\n\t\t// Relative XYZ has Y=1 for media white\n\t\treturn XYZ.map (v => Math.max(v * Yw, 0));\n\t},\n\ttoBase (AbsXYZ) {\n\t\t// Convert to media-white relative XYZ\n\t\treturn AbsXYZ.map(v => Math.max(v / Yw, 0));\n\t}\n});\n","import ColorSpace from \"../space.js\";\nimport {multiplyMatrices} from \"../util.js\";\nimport XYZ_Abs_D65 from \"./xyz-abs-d65.js\";\n\nconst b = 1.15;\nconst g = 0.66;\nconst n = 2610 / (2 ** 14);\nconst ninv = (2 ** 14) / 2610;\nconst c1 = 3424 / (2 ** 12);\nconst c2 = 2413 / (2 ** 7);\nconst c3 = 2392 / (2 ** 7);\nconst p = 1.7 * 2523 / (2 ** 5);\nconst pinv = (2 ** 5) / (1.7 * 2523);\nconst d = -0.56;\nconst d0 = 1.6295499532821566E-11;\n\nconst XYZtoCone_M = [\n\t[ 0.41478972, 0.579999, 0.0146480 ],\n\t[ -0.2015100, 1.120649, 0.0531008 ],\n\t[ -0.0166008, 0.264800, 0.6684799 ]\n];\n// XYZtoCone_M inverted\nconst ConetoXYZ_M = [\n\t[ 1.9242264357876067, -1.0047923125953657, 0.037651404030618 ],\n\t[ 0.35031676209499907, 0.7264811939316552, -0.06538442294808501 ],\n\t[ -0.09098281098284752, -0.3127282905230739, 1.5227665613052603 ]\n];\nconst ConetoIab_M = [\n\t[ 0.5, 0.5, 0 ],\n\t[ 3.524000, -4.066708, 0.542708 ],\n\t[ 0.199076, 1.096799, -1.295875 ]\n];\n// ConetoIab_M inverted\nconst IabtoCone_M = [\n\t[ 1, 0.1386050432715393, 0.05804731615611886 ],\n\t[ 0.9999999999999999, -0.1386050432715393, -0.05804731615611886 ],\n\t[ 0.9999999999999998, -0.09601924202631895, -0.8118918960560388 ]\n];\n\nexport default new ColorSpace({\n\tid: \"jzazbz\",\n\tname: \"Jzazbz\",\n\tcoords: {\n\t\tjz: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Jz\",\n\t\t},\n\t\taz: {\n\t\t\trefRange: [-0.5, 0.5],\n\t\t},\n\t\tbz: {\n\t\t\trefRange: [-0.5, 0.5],\n\t\t}\n\t},\n\n\tbase: XYZ_Abs_D65,\n\tfromBase (XYZ) {\n\t\t// First make XYZ absolute, not relative to media white\n\t\t// Maximum luminance in PQ is 10,000 cd/m²\n\t\t// Relative XYZ has Y=1 for media white\n\t\t// BT.2048 says media white Y=203 at PQ 58\n\n\t\tlet [ Xa, Ya, Za ] = XYZ;\n\n\t\t// modify X and Y\n\t\tlet Xm = (b * Xa) - ((b - 1) * Za);\n\t\tlet Ym = (g * Ya) - ((g - 1) * Xa);\n\n\t\t// move to LMS cone domain\n\t\tlet LMS = multiplyMatrices(XYZtoCone_M, [ Xm, Ym, Za ]);\n\n\t\t// PQ-encode LMS\n\t\tlet PQLMS = LMS.map (function (val) {\n\t\t\tlet num = c1 + (c2 * ((val / 10000) ** n));\n\t\t\tlet denom = 1 + (c3 * ((val / 10000) ** n));\n\n\t\t\treturn (num / denom) ** p;\n\t\t});\n\n\t\t// almost there, calculate Iz az bz\n\t\tlet [ Iz, az, bz] = multiplyMatrices(ConetoIab_M, PQLMS);\n\t\t// console.log({Iz, az, bz});\n\n\t\tlet Jz = ((1 + d) * Iz) / (1 + (d * Iz)) - d0;\n\t\treturn [Jz, az, bz];\n\t},\n\ttoBase (Jzazbz) {\n\t\tlet [Jz, az, bz] = Jzazbz;\n\t\tlet Iz = (Jz + d0) / (1 + d - d * (Jz + d0));\n\n\t\t// bring into LMS cone domain\n\t\tlet PQLMS = multiplyMatrices(IabtoCone_M, [ Iz, az, bz ]);\n\n\t\t// convert from PQ-coded to linear-light\n\t\tlet LMS = PQLMS.map(function (val){\n\t\t\tlet num = (c1 - (val ** pinv));\n\t\t\tlet denom = (c3 * (val ** pinv)) - c2;\n\t\t\tlet x = 10000 * ((num / denom) ** ninv);\n\n\t\t\treturn (x); \t// luminance relative to diffuse white, [0, 70 or so].\n\t\t});\n\n\t\t// modified abs XYZ\n\t\tlet [ Xm, Ym, Za ] = multiplyMatrices(ConetoXYZ_M, LMS);\n\n\t\t// restore standard D50 relative XYZ, relative to media white\n\t\tlet Xa = (Xm + ((b -1) * Za)) / b;\n\t\tlet Ya = (Ym + ((g -1) * Xa)) / g;\n\t\treturn [ Xa, Ya, Za ];\n\t},\n\n\tformats: {\n\t\t// https://drafts.csswg.org/css-color-hdr/#Jzazbz\n\t\t\"color\": {}\n\t}\n});\n\n","import ColorSpace from \"../space.js\";\nimport Jzazbz from \"./jzazbz.js\";\nimport {constrain as constrainAngle} from \"../angles.js\";\n\nexport default new ColorSpace({\n\tid: \"jzczhz\",\n\tname: \"JzCzHz\",\n\tcoords: {\n\t\tjz: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Jz\",\n\t\t},\n\t\tcz: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Chroma\",\n\t\t},\n\t\thz: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\",\n\t\t}\n\t},\n\n\tbase: Jzazbz,\n\tfromBase (jzazbz) {\n\t\t// Convert to polar form\n\t\tlet [Jz, az, bz] = jzazbz;\n\t\tlet hue;\n\t\tconst ε = 0.0002; // chromatic components much smaller than a,b\n\n\t\tif (Math.abs(az) < ε && Math.abs(bz) < ε) {\n\t\t\thue = NaN;\n\t\t}\n\t\telse {\n\t\t\thue = Math.atan2(bz, az) * 180 / Math.PI;\n\t\t}\n\n\t\treturn [\n\t\t\tJz, // Jz is still Jz\n\t\t\tMath.sqrt(az ** 2 + bz ** 2), // Chroma\n\t\t\tconstrainAngle(hue) // Hue, in degrees [0 to 360)\n\t\t];\n\t},\n\ttoBase (jzczhz) {\n\t\t// Convert from polar form\n\t\t// debugger;\n\t\treturn [\n\t\t\tjzczhz[0], // Jz is still Jz\n\t\t\tjzczhz[1] * Math.cos(jzczhz[2] * Math.PI / 180), // az\n\t\t\tjzczhz[1] * Math.sin(jzczhz[2] * Math.PI / 180) // bz\n\t\t];\n\t},\n\tformats: {\n\t\tcolor: {}\n\t},\n});\n","import ColorSpace from \"../space.js\";\nimport {multiplyMatrices} from \"../util.js\";\nimport XYZ_Abs_D65 from \"./xyz-abs-d65.js\";\n\nconst c1 = 3424 / 4096;\nconst c2 = 2413 / 128;\nconst c3 = 2392 / 128;\nconst m1 = 2610 / 16384;\nconst m2 = 2523 / 32;\nconst im1 = 16384 / 2610;\nconst im2 = 32 / 2523;\n\n// The matrix below includes the 4% crosstalk components\n// and is from the Dolby \"What is ICtCp\" paper\"\nconst XYZtoLMS_M = [\n\t[ 0.3592, 0.6976, -0.0358],\n\t[-0.1922, 1.1004, 0.0755],\n\t[ 0.0070, 0.0749, 0.8434]\n];\n// linear-light Rec.2020 to LMS, again with crosstalk\n// rational terms from Jan Fröhlich,\n// Encoding High Dynamic Range andWide Color Gamut Imagery, p.97\n// and ITU-R BT.2124-0 p.2\n/*\nconst Rec2020toLMS_M = [\n\t[ 1688 / 4096, 2146 / 4096, 262 / 4096 ],\n\t[ 683 / 4096, 2951 / 4096, 462 / 4096 ],\n\t[ 99 / 4096, 309 / 4096, 3688 / 4096 ]\n];\n*/\n// this includes the Ebner LMS coefficients,\n// the rotation, and the scaling to [-0.5,0.5] range\n// rational terms from Fröhlich p.97\n// and ITU-R BT.2124-0 pp.2-3\nconst LMStoIPT_M = [\n\t[ 2048 / 4096, 2048 / 4096, 0 ],\n\t[ 6610 / 4096, -13613 / 4096, 7003 / 4096 ],\n\t[ 17933 / 4096, -17390 / 4096, -543 / 4096 ]\n];\n\n// inverted matrices, calculated from the above\nconst IPTtoLMS_M = [\n\t[0.99998889656284013833, 0.00860505014728705821, 0.1110343715986164786 ],\n\t[1.0000111034371598616, -0.00860505014728705821, -0.1110343715986164786 ],\n\t[1.000032063391005412, 0.56004913547279000113, -0.32063391005412026469],\n];\n/*\nconst LMStoRec2020_M = [\n\t[ 3.4375568932814012112, -2.5072112125095058195, 0.069654319228104608382],\n\t[-0.79142868665644156125, 1.9838372198740089874, -0.19240853321756742626 ],\n\t[-0.025646662911506476363, -0.099240248643945566751, 1.1248869115554520431 ]\n];\n*/\nconst LMStoXYZ_M = [\n\t[ 2.0701800566956135096, -1.3264568761030210255, 0.20661600684785517081 ],\n\t[ 0.36498825003265747974, 0.68046736285223514102, -0.045421753075853231409],\n\t[-0.049595542238932107896, -0.049421161186757487412, 1.1879959417328034394 ]\n];\n\n// Only the PQ form of ICtCp is implemented here. There is also an HLG form.\n// from Dolby, \"WHAT IS ICTCP?\"\n// https://professional.dolby.com/siteassets/pdfs/ictcp_dolbywhitepaper_v071.pdf\n// and\n// Dolby, \"Perceptual Color Volume\n// Measuring the Distinguishable Colors of HDR and WCG Displays\"\n// https://professional.dolby.com/siteassets/pdfs/dolby-vision-measuring-perceptual-color-volume-v7.1.pdf\nexport default new ColorSpace({\n\tid: \"ictcp\",\n\tname: \"ICTCP\",\n\t// From BT.2100-2 page 7:\n\t// During production, signal values are expected to exceed the\n\t// range E′ = [0.0 : 1.0]. This provides processing headroom and avoids\n\t// signal degradation during cascaded processing. Such values of E′,\n\t// below 0.0 or exceeding 1.0, should not be clipped during production\n\t// and exchange.\n\t// Values below 0.0 should not be clipped in reference displays (even\n\t// though they represent “negative” light) to allow the black level of\n\t// the signal (LB) to be properly set using test signals known as “PLUGE”\n\tcoords: {\n\t\ti: {\n\t\t\trefRange: [0, 1],\t// Constant luminance,\n\t\t\tname: \"I\"\n\t\t},\n\t\tct: {\n\t\t\trefRange: [-0.5, 0.5],\t// Full BT.2020 gamut in range [-0.5, 0.5]\n\t\t\tname: \"CT\"\n\t\t},\n\t\tcp: {\n\t\t\trefRange: [-0.5, 0.5],\n\t\t\tname: \"CP\"\n\t\t}\n\t},\n\n\tbase: XYZ_Abs_D65,\n\tfromBase (XYZ) {\n\t\t// move to LMS cone domain\n\t\tlet LMS = multiplyMatrices(XYZtoLMS_M, XYZ);\n\n\t\treturn LMStoICtCp(LMS);\n\t},\n\ttoBase (ICtCp) {\n\t\tlet LMS = ICtCptoLMS(ICtCp);\n\n\t\treturn multiplyMatrices(LMStoXYZ_M, LMS);\n\t},\n\tformats: {\n\t\tcolor: {}\n\t},\n});\n\nfunction LMStoICtCp (LMS) {\n\t// apply the PQ EOTF\n\t// we can't ever be dividing by zero because of the \"1 +\" in the denominator\n\tlet PQLMS = LMS.map (function (val) {\n\t\tlet num = c1 + (c2 * ((val / 10000) ** m1));\n\t\tlet denom = 1 + (c3 * ((val / 10000) ** m1));\n\n\t\treturn (num / denom) ** m2;\n\t});\n\n\t// LMS to IPT, with rotation for Y'C'bC'r compatibility\n\treturn multiplyMatrices(LMStoIPT_M, PQLMS);\n}\n\nfunction ICtCptoLMS (ICtCp) {\n\tlet PQLMS = multiplyMatrices(IPTtoLMS_M, ICtCp);\n\n\t// From BT.2124-0 Annex 2 Conversion 3\n\tlet LMS = PQLMS.map (function (val) {\n\t\tlet num = Math.max((val ** im2) - c1, 0);\n\t\tlet denom = (c2 - (c3 * (val ** im2)));\n\t\treturn 10000 * ((num / denom) ** im1);\n\t});\n\n\treturn LMS;\n}\n","import ColorSpace from \"../space.js\";\nimport {multiplyMatrices} from \"../util.js\";\nimport XYZ_D65 from \"./xyz-d65.js\";\n\n// Recalculated for consistent reference white\n// see https://github.com/w3c/csswg-drafts/issues/6642#issuecomment-943521484\nconst XYZtoLMS_M = [\n\t[ 0.8190224432164319, 0.3619062562801221, -0.12887378261216414 ],\n\t[ 0.0329836671980271, 0.9292868468965546, 0.03614466816999844 ],\n\t[ 0.048177199566046255, 0.26423952494422764, 0.6335478258136937 ]\n];\n// inverse of XYZtoLMS_M\nconst LMStoXYZ_M = [\n\t[ 1.2268798733741557, -0.5578149965554813, 0.28139105017721583],\n\t[ -0.04057576262431372, 1.1122868293970594, -0.07171106666151701],\n\t[ -0.07637294974672142, -0.4214933239627914, 1.5869240244272418 ]\n]\nconst LMStoLab_M = [\n\t[ 0.2104542553, 0.7936177850, -0.0040720468 ],\n\t[ 1.9779984951, -2.4285922050, 0.4505937099 ],\n\t[ 0.0259040371, 0.7827717662, -0.8086757660 ]\n];\n// LMStoIab_M inverted\nconst LabtoLMS_M = [\n\t[ 0.99999999845051981432, 0.39633779217376785678, 0.21580375806075880339 ],\n\t[ 1.0000000088817607767, -0.1055613423236563494, -0.063854174771705903402 ],\n\t[ 1.0000000546724109177, -0.089484182094965759684, -1.2914855378640917399 ]\n];\n\nexport default new ColorSpace({\n\tid: \"oklab\",\n name: \"OKLab\",\n coords: {\n\t\tl: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"L\"\n\t\t},\n\t\ta: {\n\t\t\trefRange: [-0.4, 0.4]\n\t\t},\n\t\tb: {\n\t\t\trefRange: [-0.4, 0.4]\n\t\t}\n },\n\n\t// Note that XYZ is relative to D65\n white: \"D65\",\n\tbase: XYZ_D65,\n\tfromBase (XYZ) {\n\t\t// move to LMS cone domain\n\t\tlet LMS = multiplyMatrices(XYZtoLMS_M, XYZ);\n\n\t\t// non-linearity\n\t\tlet LMSg = LMS.map(val => Math.cbrt(val));\n\n\t\treturn multiplyMatrices(LMStoLab_M, LMSg);\n\n\t},\n\ttoBase (OKLab) {\n\t\t// move to LMS cone domain\n\t\tlet LMSg = multiplyMatrices(LabtoLMS_M, OKLab);\n\n\t\t// restore linearity\n\t\tlet LMS = LMSg.map(val => val ** 3);\n\n\t\treturn multiplyMatrices(LMStoXYZ_M, LMS);\n\t},\n\n\tformats: {\n\t\t\"oklab\": {\n\t\t\tcoords: [\"\", \"\", \"\"],\n\t\t}\n\t}\n});\n","import distance from \"../distance.js\";\n\nexport default function deltaE76 (color, sample) {\n\treturn distance(color, sample, \"lab\");\n};","import jzczhz from \"../spaces/jzczhz.js\";\n\n// More accurate color-difference formulae\n// than the simple 1976 Euclidean distance in Lab\n\n// Uses JzCzHz, which has improved perceptual uniformity\n// and thus a simple Euclidean root-sum of ΔL² ΔC² ΔH²\n// gives good results.\n\nexport default function (color, sample) {\n\t// Given this color as the reference\n\t// and a sample,\n\t// calculate deltaE in JzCzHz.\n\tlet [Jz1, Cz1, Hz1] = jzczhz.from(color);\n\tlet [Jz2, Cz2, Hz2] = jzczhz.from(sample);\n\n\t// Lightness and Chroma differences\n\t// sign does not matter as they are squared.\n\tlet ΔJ = Jz1 - Jz2;\n\tlet ΔC = Cz1 - Cz2;\n\n\t// length of chord for ΔH\n\tif ((Number.isNaN(Hz1)) && (Number.isNaN(Hz2))) {\n\t\t// both undefined hues\n\t\tHz1 = 0;\n\t\tHz2 = 0;\n\t} else\n\tif (Number.isNaN(Hz1)) {\n\t\t// one undefined, set to the defined hue\n\t\tHz1 = Hz2;\n\t} else\n\tif (Number.isNaN(Hz2)) {\n\t\tHz2 = Hz1;\n\t}\n\n\tlet Δh = Hz1 - Hz2;\n\tlet ΔH = 2 * Math.sqrt(Cz1 * Cz2) * Math.sin((Δh / 2) * (Math.PI / 180));\n\n\treturn Math.sqrt(ΔJ ** 2 + ΔC ** 2 + ΔH ** 2);\n};","import ictcp from \"../spaces/ictcp.js\";\n\n// Delta E in ICtCp space,\n// which the ITU calls Delta E ITP, which is shorter\n// formulae from ITU Rec. ITU-R BT.2124-0\n\nexport default function (color, sample) {\n\t// Given this color as the reference\n\t// and a sample,\n\t// calculate deltaE in ICtCp\n\t// which is simply the Euclidean distance\n\n\tlet [ I1, T1, P1 ] = ictcp.from(color);\n\tlet [ I2, T2, P2 ] = ictcp.from(sample);\n\n\t// the 0.25 factor is to undo the encoding scaling in Ct\n\t// the 720 is so that 1 deltaE = 1 JND\n\t// per ITU-R BT.2124-0 p.3\n\n\treturn 720 * Math.sqrt((I1 - I2) ** 2 + (0.25 * (T1 -T2) ** 2) + (P1 - P2) ** 2);\n};","// More accurate color-difference formulae\n// than the simple 1976 Euclidean distance in CIE Lab\n\nimport oklab from \"../spaces/oklab.js\";\n\nexport default function (color, sample) {\n\t// Given this color as the reference\n\t// and a sample,\n\t// calculate deltaEOK, term by term as root sum of squares\n\tlet [L1, a1, b1] = oklab.from(color);\n\tlet [L2, a2, b2] = oklab.from(sample);\n\tlet ΔL = L1 - L2;\n\tlet Δa = a1 - a2;\n\tlet Δb = b1 - b2;\n\treturn Math.sqrt(ΔL ** 2 + Δa ** 2 + Δb ** 2);\n};\n","import getColor from \"./getColor.js\";\nimport defaults from \"./defaults.js\";\nimport {isString} from \"./util.js\";\nimport * as deltaEMethods from \"./deltaE/index.js\";\n\nexport default function deltaE (c1, c2, o = {}) {\n\tif (isString(o)) {\n\t\to = {method: o};\n\t}\n\n\tlet {method = defaults.deltaE, ...rest} = o;\n\n\tc1 = getColor(c1);\n\tc2 = getColor(c2);\n\n\tfor (let m in deltaEMethods) {\n\t\tif (\"deltae\" + method.toLowerCase() === m.toLowerCase()) {\n\t\t\treturn deltaEMethods[m](c1, c2, rest);\n\t\t}\n\t}\n\n\tthrow new TypeError(`Unknown deltaE method: ${method}`);\n};","import ColorSpace from \"./space.js\";\nimport set from \"./set.js\";\n\nexport function lighten (color, amount = .25) {\n\tlet space = ColorSpace.get(\"oklch\", \"lch\");\n\tlet lightness = [space, \"l\"];\n\treturn set(color, lightness, l => l * (1 + amount));\n}\n\nexport function darken (color, amount = .25) {\n\tlet space = ColorSpace.get(\"oklch\", \"lch\");\n\tlet lightness = [space, \"l\"];\n\treturn set(color, lightness, l => l * (1 - amount));\n}","/**\n * Functions related to color interpolation\n */\nimport Color from \"./color.js\";\nimport ColorSpace from \"./space.js\";\nimport {type, interpolate} from \"./util.js\";\nimport getColor from \"./getColor.js\";\nimport clone from \"./clone.js\";\nimport to from \"./to.js\";\nimport toGamut from \"./toGamut.js\";\nimport get from \"./get.js\";\nimport set from \"./set.js\";\nimport defaults from \"./defaults.js\";\nimport * as angles from \"./angles.js\";\nimport deltaE from \"./deltaE.js\";\n\n/**\n * Return an intermediate color between two colors\n * Signatures: mix(c1, c2, p, options)\n * mix(c1, c2, options)\n * mix(color)\n * @param {Color | string} c1 The first color\n * @param {Color | string} [c2] The second color\n * @param {number} [p=.5] A 0-1 percentage where 0 is c1 and 1 is c2\n * @param {Object} [o={}]\n * @return {Color}\n */\nexport function mix (c1, c2, p = .5, o = {}) {\n\t[c1, c2] = [getColor(c1), getColor(c2)];\n\n\tif (type(p) === \"object\") {\n\t\t[p, o] = [.5, p];\n\t}\n\n\tlet {space, outputSpace} = o;\n\n\tlet r = range(c1, c2, {space, outputSpace});\n\treturn r(p);\n}\n\n/**\n *\n * @param {Color | string | Function} c1 The first color or a range\n * @param {Color | string} [c2] The second color if c1 is not a range\n * @param {Object} [options={}]\n * @return {Color[]}\n */\nexport function steps (c1, c2, options = {}) {\n\tlet colorRange;\n\n\tif (isRange(c1)) {\n\t\t// Tweaking existing range\n\t\t[colorRange, options] = [c1, c2];\n\t\t[c1, c2] = colorRange.rangeArgs.colors;\n\t}\n\n\tlet {\n\t\tmaxDeltaE, deltaEMethod,\n\t\tsteps = 2, maxSteps = 1000,\n\t\t...rangeOptions\n\t} = options;\n\n\tif (!colorRange) {\n\t\t[c1, c2] = [getColor(c1), getColor(c2)];\n\t\tcolorRange = range(c1, c2, rangeOptions);\n\t}\n\n\tlet totalDelta = deltaE(c1, c2);\n\tlet actualSteps = maxDeltaE > 0? Math.max(steps, Math.ceil(totalDelta / maxDeltaE) + 1) : steps;\n\tlet ret = [];\n\n\tif (maxSteps !== undefined) {\n\t\tactualSteps = Math.min(actualSteps, maxSteps);\n\t}\n\n\tif (actualSteps === 1) {\n\t\tret = [{p: .5, color: colorRange(.5)}];\n\t}\n\telse {\n\t\tlet step = 1 / (actualSteps - 1);\n\t\tret = Array.from({length: actualSteps}, (_, i) => {\n\t\t\tlet p = i * step;\n\t\t\treturn {p, color: colorRange(p)};\n\t\t});\n\t}\n\n\tif (maxDeltaE > 0) {\n\t\t// Iterate over all stops and find max deltaE\n\t\tlet maxDelta = ret.reduce((acc, cur, i) => {\n\t\t\tif (i === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tlet ΔΕ = deltaE(cur.color, ret[i - 1].color, deltaEMethod);\n\t\t\treturn Math.max(acc, ΔΕ);\n\t\t}, 0);\n\n\t\twhile (maxDelta > maxDeltaE) {\n\t\t\t// Insert intermediate stops and measure maxDelta again\n\t\t\t// We need to do this for all pairs, otherwise the midpoint shifts\n\t\t\tmaxDelta = 0;\n\n\t\t\tfor (let i = 1; (i < ret.length) && (ret.length < maxSteps); i++) {\n\t\t\t\tlet prev = ret[i - 1];\n\t\t\t\tlet cur = ret[i];\n\n\t\t\t\tlet p = (cur.p + prev.p) / 2;\n\t\t\t\tlet color = colorRange(p);\n\t\t\t\tmaxDelta = Math.max(maxDelta, deltaE(color, prev.color), deltaE(color, cur.color));\n\t\t\t\tret.splice(i, 0, {p, color: colorRange(p)});\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t}\n\n\tret = ret.map(a => a.color);\n\n\treturn ret;\n};\n\n/**\n * Interpolate to color2 and return a function that takes a 0-1 percentage\n * @param {Color | string | Function} color1 The first color or an existing range\n * @param {Color | string} [color2] If color1 is a color, this is the second color\n * @param {Object} [options={}]\n * @returns {Function} A function that takes a 0-1 percentage and returns a color\n */\nexport function range (color1, color2, options = {}) {\n\tif (isRange(color1)) {\n\t\t// Tweaking existing range\n\t\tlet [r, options] = [color1, color2];\n\n\t\treturn range(...r.rangeArgs.colors, {...r.rangeArgs.options, ...options});\n\t}\n\n\tlet {space, outputSpace, progression, premultiplied} = options;\n\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\t// Make sure we're working on copies of these colors\n\tcolor1 = clone(color1);\n\tcolor2 = clone(color2);\n\n\tlet rangeArgs = {colors: [color1, color2], options};\n\n\tif (space) {\n\t\tspace = ColorSpace.get(space);\n\t}\n\telse {\n\t\tspace = ColorSpace.registry[defaults.interpolationSpace] || color1.space;\n\t}\n\n\toutputSpace = outputSpace? ColorSpace.get(outputSpace) : space;\n\n\tcolor1 = to(color1, space);\n\tcolor2 = to(color2, space);\n\n\t// Gamut map to avoid areas of flat color\n\tcolor1 = toGamut(color1);\n\tcolor2 = toGamut(color2);\n\n\t// Handle hue interpolation\n\t// See https://github.com/w3c/csswg-drafts/issues/4735#issuecomment-635741840\n\tif (space.coords.h && space.coords.h.type === \"angle\") {\n\t\tlet arc = options.hue = options.hue || \"shorter\";\n\n\t\tlet hue = [space, \"h\"];\n\t\tlet [θ1, θ2] = [get(color1, hue), get(color2, hue)];\n\t\t[θ1, θ2] = angles.adjust(arc, [θ1, θ2]);\n\t\tset(color1, hue, θ1);\n\t\tset(color2, hue, θ2);\n\t}\n\n\tif (premultiplied) {\n\t\t// not coping with polar spaces yet\n\t\tcolor1.coords = color1.coords.map(c => c * color1.alpha);\n\t\tcolor2.coords = color2.coords.map(c => c * color2.alpha);\n\t}\n\n\treturn Object.assign(p => {\n\t\tp = progression? progression(p) : p;\n\t\tlet coords = color1.coords.map((start, i) => {\n\t\t\tlet end = color2.coords[i];\n\t\t\treturn interpolate(start, end, p);\n\t\t});\n\n\t\tlet alpha = interpolate(color1.alpha, color2.alpha, p);\n\t\tlet ret = {space, coords, alpha};\n\n\t\tif (premultiplied) {\n\t\t\t// undo premultiplication\n\t\t\tret.coords = ret.coords.map(c => c / alpha);\n\t\t}\n\n\t\tif (outputSpace !== space) {\n\t\t\tret = to(ret, outputSpace);\n\t\t}\n\n\t\treturn ret;\n\t}, {\n\t\trangeArgs\n\t});\n};\n\nexport function isRange (val) {\n\treturn type(val) === \"function\" && !!val.rangeArgs;\n};\n\ndefaults.interpolationSpace = \"lab\";\n\nexport function register(Color) {\n\tColor.defineFunction(\"mix\", mix, {returns: \"color\"});\n\tColor.defineFunction(\"range\", range, {returns: \"function\"});\n\tColor.defineFunction(\"steps\", steps, {returns: \"array\"});\n}\n\n","import ColorSpace from \"../space.js\";\nimport sRGB from \"./srgb.js\";\n\nexport default new ColorSpace({\n\tid: \"hsl\",\n\tname: \"HSL\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\"\n\t\t},\n\t\ts: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Saturation\"\n\t\t},\n\t\tl: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Lightness\"\n\t\t}\n\t},\n\n\tbase: sRGB,\n\n\t// Adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB\n\tfromBase: rgb => {\n\t\tlet max = Math.max(...rgb);\n\t\tlet min = Math.min(...rgb);\n\t\tlet [r, g, b] = rgb;\n\t\tlet [h, s, l] = [NaN, 0, (min + max)/2];\n\t\tlet d = max - min;\n\n\t\tif (d !== 0) {\n\t\t\ts = (l === 0 || l === 1) ? 0 : (max - l) / Math.min(l, 1 - l);\n\n\t\t\tswitch (max) {\n\t\t\t\tcase r: h = (g - b) / d + (g < b ? 6 : 0); break;\n\t\t\t\tcase g: h = (b - r) / d + 2; break;\n\t\t\t\tcase b: h = (r - g) / d + 4;\n\t\t\t}\n\n\t\t\th = h * 60;\n\t\t}\n\n\t\treturn [h, s * 100, l * 100];\n\t},\n\n\t// Adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative\n\ttoBase: hsl => {\n\t\tlet [h, s, l] = hsl;\n\t\th = h % 360;\n\n\t\tif (h < 0) {\n\t\t\th += 360;\n\t\t}\n\n\t\ts /= 100;\n\t\tl /= 100;\n\n\t\tfunction f(n) {\n\t\t\tlet k = (n + h/30) % 12;\n\t\t\tlet a = s * Math.min(l, 1 - l);\n\t\t\treturn l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n\t\t}\n\n\t\treturn [f(0), f(8), f(4)];\n\t},\n\n\tformats: {\n\t\t\"hsl\": {\n\t\t\ttoGamut: true,\n\t\t\tcoords: [\" | \", \"\", \"\"],\n\t\t},\n\t\t\"hsla\": {\n\t\t\tcoords: [\" | \", \"\", \"\"],\n\t\t\tcommas: true,\n\t\t\tlastAlpha: true,\n\t\t}\n\t},\n});\n","import ColorSpace from \"../space.js\";\nimport HSL from \"./hsl.js\";\n\n// The Hue, Whiteness Blackness (HWB) colorspace\n// See https://drafts.csswg.org/css-color-4/#the-hwb-notation\n// Note that, like HSL, calculations are done directly on\n// gamma-corrected sRGB values rather than linearising them first.\n\nexport default new ColorSpace({\n\tid: \"hsv\",\n\tname: \"HSV\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\"\n\t\t},\n\t\ts: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Saturation\"\n\t\t},\n\t\tv: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Value\"\n\t\t}\n\t},\n\n\tbase: HSL,\n\t// https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion\n\tfromBase (hsl) {\n\t\tlet [h, s, l] = hsl;\n\t\ts /= 100;\n\t\tl /= 100;\n\n\t\tlet v = l + s * Math.min(l, 1 - l);\n\n\t\treturn [\n\t\t\th, // h is the same\n\t\t\tv === 0? 0 : 200 * (1 - l / v), // s\n\t\t\t100 * v\n\t\t];\n\t},\n\t// https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion\n\ttoBase (hsv) {\n\t\tlet [h, s, v] = hsv;\n\n\t\ts /= 100;\n\t\tv /= 100;\n\n\t\tlet l = v * (1 - s/2);\n\n\t\treturn [\n\t\t\th, // h is the same\n\t\t\t(l === 0 || l === 1)? 0 : ((v - l) / Math.min(l, 1 - l)) * 100,\n\t\t\tl * 100\n\t\t];\n\t},\n\tformats: {\n\t\tcolor: {\n\t\t\ttoGamut: true,\n\t\t}\n\t}\n});\n","import ColorSpace from \"../space.js\";\nimport HSV from \"./hsv.js\";\n\n// The Hue, Whiteness Blackness (HWB) colorspace\n// See https://drafts.csswg.org/css-color-4/#the-hwb-notation\n// Note that, like HSL, calculations are done directly on\n// gamma-corrected sRGB values rather than linearising them first.\n\nexport default new ColorSpace({\n\tid: \"hwb\",\n\tname: \"HWB\",\n\tcoords: {\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\"\n\t\t},\n\t\tw: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Whiteness\"\n\t\t},\n\t\tb: {\n\t\t\trange: [0, 100],\n\t\t\tname: \"Blackness\"\n\t\t}\n\t},\n\n\tbase: HSV,\n\tfromBase (hsv) {\n\t\tlet [h, s, v] = hsv;\n\n\t\treturn [h, v * (100 - s) / 100, 100 - v];\n\t},\n\ttoBase (hwb) {\n\t\tlet [h, w, b] = hwb;\n\n\t\t// Now convert percentages to [0..1]\n\t\tw /= 100;\n\t\tb /= 100;\n\n\t\t// Achromatic check (white plus black >= 1)\n\t\tlet sum = w + b;\n\t\tif (sum >= 1) {\n\t\t\t let gray = w / sum;\n\t\t\t return [h, 0, gray * 100];\n\t\t}\n\n\t\tlet v = (1 - b);\n\t\tlet s = (v === 0) ? 0 : 1 - w / v;\n\t\treturn [h, s * 100, v * 100];\n\t},\n\n\tformats: {\n\t\t\"hwb\": {\n\t\t\ttoGamut: true,\n\t\t\tcoords: [\" | \", \"\", \"\"],\n\t\t}\n\t}\n});\n","import RGBColorSpace from \"../rgbspace.js\";\n\n// convert an array of linear-light a98-rgb values to CIE XYZ\n// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n// has greater numerical precision than section 4.3.5.3 of\n// https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n// but the values below were calculated from first principles\n// from the chromaticity coordinates of R G B W\nconst toXYZ_M = [\n\t[ 0.5766690429101305, 0.1855582379065463, 0.1882286462349947 ],\n\t[ 0.29734497525053605, 0.6273635662554661, 0.07529145849399788 ],\n\t[ 0.02703136138641234, 0.07068885253582723, 0.9913375368376388 ]\n];\n\nconst fromXYZ_M = [\n\t[ 2.0415879038107465, -0.5650069742788596, -0.34473135077832956 ],\n\t[ -0.9692436362808795, 1.8759675015077202, 0.04155505740717557 ],\n\t[ 0.013444280632031142, -0.11836239223101838, 1.0151749943912054 ]\n]\n\nexport default new RGBColorSpace({\n\tid: \"a98rgb-linear\",\n\tname: \"Linear Adobe® 98 RGB compatible\",\n\twhite: \"D65\",\n\ttoXYZ_M,\n\tfromXYZ_M\n});\n","import RGBColorSpace from \"../rgbspace.js\";\nimport A98Linear from \"./a98rgb-linear.js\";\n\nexport default new RGBColorSpace({\n\tid: \"a98rgb\",\n\tname: \"Adobe® 98 RGB compatible\",\n\tbase: A98Linear,\n\ttoBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 563 / 256) * Math.sign(val)),\n\tfromBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)),\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"a98-rgb\"\n\t\t}\n\t},\n});\n","import RGBColorSpace from \"../rgbspace.js\";\nimport XYZ_D50 from \"./xyz-d50.js\";\n\n// convert an array of prophoto-rgb values to CIE XYZ\n// using D50 (so no chromatic adaptation needed afterwards)\n// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\nconst toXYZ_M = [\n\t[ 0.7977604896723027, 0.13518583717574031, 0.0313493495815248 ],\n\t[ 0.2880711282292934, 0.7118432178101014, 0.00008565396060525902 ],\n\t[ 0.0, 0.0, 0.8251046025104601 ]\n];\n\nconst fromXYZ_M = [\n\t[ 1.3457989731028281, -0.25558010007997534, -0.05110628506753401 ],\n\t[ -0.5446224939028347, 1.5082327413132781, 0.02053603239147973 ],\n\t[ 0.0, 0.0, 1.2119675456389454 ]\n]\n\nexport default new RGBColorSpace({\n\tid: \"prophoto-linear\",\n\tname: \"Linear ProPhoto\",\n\twhite: \"D50\",\n\tbase: XYZ_D50,\n\ttoXYZ_M,\n\tfromXYZ_M\n});\n","import RGBColorSpace from \"../rgbspace.js\";\nimport ProPhotoLinear from \"./prophoto-linear.js\";\n\nconst Et = 1/512;\nconst Et2 = 16/512;\n\nexport default new RGBColorSpace({\n\tid: \"prophoto\",\n\tname: \"ProPhoto\",\n\tbase: ProPhotoLinear,\n\ttoBase(RGB) {\n\t\t// Transfer curve is gamma 1.8 with a small linear portion\n\t\treturn RGB.map(v => v < Et2? v / 16 : v ** 1.8);\n\t},\n\tfromBase(RGB) {\n\t\treturn RGB.map(v => v >= Et? v ** (1/1.8) : 16 * v);\n\t},\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"prophoto-rgb\"\n\t\t}\n\t},\n});\n","import ColorSpace from \"../space.js\";\nimport OKLab from \"./oklab.js\";\nimport {constrain as constrainAngle} from \"../angles.js\";\n\nexport default new ColorSpace({\n\tid: \"oklch\",\n\tname: \"OKLCh\",\n\tcoords: {\n\t\tl: {\n\t\t\trefRange: [0, 1],\n\t\t\tname: \"Lightness\"\n\t\t},\n\t\tc: {\n\t\t\trefRange: [0, 0.4],\n\t\t\tname: \"Chroma\"\n\t\t},\n\t\th: {\n\t\t\trefRange: [0, 360],\n\t\t\ttype: \"angle\",\n\t\t\tname: \"Hue\"\n\t\t}\n\t},\n\twhite: \"D65\",\n\n\tbase: OKLab,\n\tfromBase (oklab) {\n\t\t// Convert to polar form\n\t\tlet [L, a, b] = oklab;\n\t\tlet h;\n\t\tconst ε = 0.0002; // chromatic components much smaller than a,b\n\n\t\tif (Math.abs(a) < ε && Math.abs(b) < ε) {\n\t\t\th = NaN;\n\t\t}\n\t\telse {\n\t\t\th = Math.atan2(b, a) * 180 / Math.PI;\n\t\t}\n\n\t\treturn [\n\t\t\tL, // OKLab L is still L\n\t\t\tMath.sqrt(a ** 2 + b ** 2), // Chroma\n\t\t\tconstrainAngle(h) // Hue, in degrees [0 to 360)\n\t\t];\n\t},\n\t// Convert from polar form\n\ttoBase (oklch) {\n\t\tlet [L, C, h] = oklch;\n\t\tlet a, b;\n\n\t\t// check for NaN hue\n\t\tif (isNaN(h)) {\n\t\t\ta = 0;\n\t\t\tb = 0;\n\t\t}\n\t\telse {\n\t\t\ta = C * Math.cos(h * Math.PI / 180);\n\t\t\tb = C * Math.sin(h * Math.PI / 180);\n\t\t}\n\n\t\treturn [ L, a, b ];\n\t},\n\n\tformats: {\n\t\t\"oklch\": {\n\t\t\tcoords: [\"\", \"\", \" | \"],\n\t\t}\n\t}\n});\n\n","import RGBColorSpace from \"../rgbspace.js\";\nimport REC2020Linear from \"./rec2020-linear.js\";\n\nconst Yw = 203;\t// absolute luminance of media white, cd/m²\nconst n = 2610 / (2 ** 14);\nconst ninv = (2 ** 14) / 2610;\nconst m = 2523 / (2 ** 5);\nconst minv = (2 ** 5) / 2523;\nconst c1 = 3424 / (2 ** 12);\nconst c2 = 2413 / (2 ** 7);\nconst c3 = 2392 / (2 ** 7);\n\nexport default new RGBColorSpace({\n\tid: \"rec2100pq\",\n\tname: \"REC.2100-PQ\",\n\tbase: REC2020Linear,\n\ttoBase (RGB) {\n\t\t// given PQ encoded component in range [0, 1]\n\t\t// return media-white relative linear-light\n\t\treturn RGB.map(function (val) {\n\t\t\tlet x = ((Math.max(((val ** minv) - c1), 0) / (c2 - (c3 * (val ** minv)))) ** ninv);\n\t\t\treturn (x * 10000 / Yw); \t// luminance relative to diffuse white, [0, 70 or so].\n\t\t});\n\t},\n\tfromBase (RGB) {\n\t\t// given media-white relative linear-light\n\t\t// returnPQ encoded component in range [0, 1]\n\t\treturn RGB.map(function (val) {\n\t\t\tlet x = Math.max(val * Yw / 10000, 0); \t// absolute luminance of peak white is 10,000 cd/m².\n\t\t\tlet num = (c1 + (c2 * (x ** n)));\n\t\t\tlet denom = (1 + (c3 * (x ** n)));\n\n\t\t\treturn ((num / denom) ** m);\n\t\t});\n\t},\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"rec2100-pq\"\n\t\t},\n\t},\n});\n","import RGBColorSpace from \"../rgbspace.js\";\nimport REC2020Linear from \"./rec2020-linear.js\";\n\n// FIXME see https://github.com/LeaVerou/color.js/issues/190\n\nconst a = 0.17883277;\nconst b = 0.28466892; // 1 - (4 * a)\nconst c = 0.55991073; // 0.5 - a * Math.log(4 *a)\n\nexport default new RGBColorSpace({\n\tid: \"rec2100hlg\",\n\tcssid: \"rec2100-hlg\",\n\tname: \"REC.2100-HLG\",\n\treferred: \"scene\",\n\n\tbase: REC2020Linear,\n\ttoBase (RGB) {\n\t\t// given HLG encoded component in range [0, 1]\n\t\t// return media-white relative linear-light\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val <= 1/12) {\n\t\t\t\treturn Math.sqrt( 3 * val);\n\t\t\t}\n\t\t\treturn a * Math.log(12 * val - b) + c;\n\t\t});\n\t},\n\tfromBase (RGB) {\n\t\t// given media-white relative linear-light\n\t\t// return HLG encoded component in range [0, 1]\n\t\t// per ITU Rec BT.2390\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val <= 0.5) {\n\t\t\t\treturn (val ** 2) / 3;\n\t\t\t}\n\t\t\treturn Math.exp(((val - c) / a) + b) / 12;\n\t\t});\n\t},\n\tformats: {\n\t\tcolor: {\n\t\t\tid: \"rec2100-hlg\"\n\t\t},\n\t},\n});\n","import hooks from \"./hooks.js\";\nimport {multiplyMatrices} from \"./util.js\";\nimport {WHITES} from \"./adapt.js\";\n\nexport const CATs = {};\n\nhooks.add(\"chromatic-adaptation-start\", env => {\n\tif (env.options.method) {\n\t\tenv.M = adapt(env.W1, env.W2, env.options.method);\n\t}\n});\n\nhooks.add(\"chromatic-adaptation-end\", env => {\n\tif (!env.M) {\n\t\tenv.M = adapt(env.W1, env.W2, env.options.method);\n\t}\n});\n\nexport function defineCAT ({id, toCone_M, fromCone_M}) {\n\t// Use id, toCone_M, fromCone_M like variables\n\tCATs[id] = arguments[0];\n};\n\nexport function adapt (W1, W2, id = \"Bradford\") {\n\t// adapt from a source whitepoint or illuminant W1\n\t// to a destination whitepoint or illuminant W2,\n\t// using the given chromatic adaptation transform (CAT)\n\t// debugger;\n\tlet method = CATs[id];\n\n\tlet [ρs, γs, βs] = multiplyMatrices(method.toCone_M, W1);\n\tlet [ρd, γd, βd] = multiplyMatrices(method.toCone_M, W2);\n\n\t// all practical illuminants have non-zero XYZ so no division by zero can occur below\n\tlet scale = [\n\t\t[ρd/ρs, 0, 0 ],\n\t\t[0, γd/γs, 0 ],\n\t\t[0, 0, βd/βs ]\n\t];\n\t// console.log({scale});\n\n\tlet scaled_cone_M = multiplyMatrices(scale, method.toCone_M);\n\tlet adapt_M\t= multiplyMatrices(method.fromCone_M, scaled_cone_M);\n\t// console.log({scaled_cone_M, adapt_M});\n\treturn adapt_M;\n};\n\ndefineCAT({\n\tid: \"von Kries\",\n\ttoCone_M: [\n\t\t[ 0.4002400, 0.7076000, -0.0808100 ],\n\t\t[ -0.2263000, 1.1653200, 0.0457000 ],\n\t\t[ 0.0000000, 0.0000000, 0.9182200 ]\n\t],\n\tfromCone_M: [\n\t\t[ 1.8599364, -1.1293816, 0.2198974 ],\n\t\t[ 0.3611914, 0.6388125, -0.0000064 ],\n\t\t[ 0.0000000, 0.0000000, 1.0890636 ]\n\t]\n});\n\ndefineCAT({\n\tid: \"Bradford\",\n\t// Convert an array of XYZ values in the range 0.0 - 1.0\n\t// to cone fundamentals\n\ttoCone_M: [\n\t\t[ 0.8951000, 0.2664000, -0.1614000 ],\n\t\t[ -0.7502000, 1.7135000, 0.0367000 ],\n\t\t[ 0.0389000, -0.0685000, 1.0296000 ]\n\t],\n\t// and back\n\tfromCone_M: [\n\t\t[ 0.9869929, -0.1470543, 0.1599627 ],\n\t\t[ 0.4323053, 0.5183603, 0.0492912 ],\n\t\t[ -0.0085287, 0.0400428, 0.9684867 ]\n\t]\n});\n\ndefineCAT({\n\tid: \"CAT02\",\n\t// with complete chromatic adaptation to W2, so D = 1.0\n\ttoCone_M: [\n\t\t[ 0.7328000, 0.4296000, -0.1624000 ],\n\t\t[ -0.7036000, 1.6975000, 0.0061000 ],\n\t\t[ 0.0030000, 0.0136000, 0.9834000 ]\n\t],\n\tfromCone_M: [\n\t\t[ 1.0961238, -0.2788690, 0.1827452 ],\n\t\t[ 0.4543690, 0.4735332, 0.0720978 ],\n\t\t[ -0.0096276, -0.0056980, 1.0153256 ]\n\t]\n});\n\ndefineCAT({\n\tid: \"CAT16\",\n\ttoCone_M: [\n\t\t[ 0.401288, 0.650173, -0.051461 ],\n\t\t[ -0.250268, 1.204414, 0.045854 ],\n\t\t[ -0.002079, 0.048952, 0.953127 ]\n\t],\n\t// the extra precision is needed to avoid roundtripping errors\n\tfromCone_M: [\n\t\t[ 1.862067855087233e+0, -1.011254630531685e+0, 1.491867754444518e-1 ],\n\t\t[ 3.875265432361372e-1, 6.214474419314753e-1, -8.973985167612518e-3 ],\n\t\t[ -1.584149884933386e-2, -3.412293802851557e-2, 1.049964436877850e+0 ]\n\t]\n});\n\nObject.assign(WHITES, {\n\t// whitepoint values from ASTM E308-01 with 10nm spacing, 1931 2 degree observer\n\t// all normalized to Y (luminance) = 1.00000\n\t// Illuminant A is a tungsten electric light, giving a very warm, orange light.\n\tA: [1.09850, 1.00000, 0.35585],\n\n\t// Illuminant C was an early approximation to daylight: illuminant A with a blue filter.\n\tC: [0.98074, 1.000000, 1.18232],\n\n\t// The daylight series of illuminants simulate natural daylight.\n\t// The color temperature (in degrees Kelvin/100) ranges from\n\t// cool, overcast daylight (D50) to bright, direct sunlight (D65).\n\tD55: [0.95682, 1.00000, 0.92149],\n\tD75: [0.94972, 1.00000, 1.22638],\n\n\t// Equal-energy illuminant, used in two-stage CAT16\n\tE: [1.00000, 1.00000, 1.00000],\n\n\t// The F series of illuminants represent fluorescent lights\n\tF2: [0.99186, 1.00000, 0.67393],\n\tF7: [0.95041, 1.00000, 1.08747],\n\tF11: [1.00962, 1.00000, 0.64350],\n});\n","import RGBColorSpace from \"../rgbspace.js\";\nimport {WHITES} from \"../adapt.js\";\nimport \"../CATs.js\"; // because of the funky whitepoint\n\n// The ACES whitepoint\n// see TB-2018-001 Derivation of the ACES White Point CIE Chromaticity Coordinates\n// also https://github.com/ampas/aces-dev/blob/master/documents/python/TB-2018-001/aces_wp.py\n// Similar to D60\nWHITES.ACES = [0.32168/0.33767, 1.00000, (1.00000 - 0.32168 - 0.33767)/0.33767];\n\n// convert an array of linear-light ACEScc values to CIE XYZ\nconst toXYZ_M = [\n\t[ 0.6624541811085053, 0.13400420645643313, 0.1561876870049078 ],\n\t[ 0.27222871678091454, 0.6740817658111484, 0.05368951740793705 ],\n\t[ -0.005574649490394108, 0.004060733528982826, 1.0103391003129971 ]\n];\nconst fromXYZ_M = [\n\t[ 1.6410233796943257, -0.32480329418479, -0.23642469523761225 ],\n\t[ -0.6636628587229829, 1.6153315916573379, 0.016756347685530137 ],\n\t[ 0.011721894328375376, -0.008284441996237409, 0.9883948585390215 ]\n];\n\nexport default new RGBColorSpace({\n\tid: \"acescg\",\n\tname: \"ACEScg\",\n\n\t// ACEScg – A scene-referred, linear-light encoding of ACES Data\n\t// https://docs.acescentral.com/specifications/acescg/\n\t// uses the AP1 primaries, see section 4.3.1 Color primaries\n\tcoords: {\n\t\tr: {\n\t\t\trange: [0, 65504],\n\t\t\tname: \"Red\"\n\t\t},\n\t\tg: {\n\t\t\trange: [0, 65504],\n\t\t\tname: \"Green\"\n\t\t},\n\t\tb: {\n\t\t\trange: [0, 65504],\n\t\t\tname: \"Blue\"\n\t\t}\n\t},\n\n\treferred: \"scene\",\n\n\twhite: WHITES.ACES,\n\n\ttoXYZ_M,\n\tfromXYZ_M,\n\n\tformats: {\n\t\tcolor: {}\n\t},\n});\n\n// export default Color;\n","import RGBColorSpace from \"../rgbspace.js\";\nimport \"../CATs.js\"; // because of the funky whitepoint\nimport ACEScg from \"./acescg.js\";\n\nconst ε = 2 ** -16;\n\n// the smallest value which, in the 32bit IEEE 754 float encoding,\n// decodes as a non-negative value\nconst ACES_min_nonzero = -0.35828683;\n\n// brightest encoded value, decodes to 65504\nconst ACES_cc_max = (Math.log2(65504) + 9.72) / 17.52; // 1.468\n\nexport default new RGBColorSpace({\n\tid: \"acescc\",\n\tname: \"ACEScc\",\n\t// see S-2014-003 ACEScc – A Logarithmic Encoding of ACES Data\n\t// https://docs.acescentral.com/specifications/acescc/\n\t// uses the AP1 primaries, see section 4.3.1 Color primaries\n\n\t// Appendix A: \"Very small ACES scene referred values below 7 1/4 stops\n\t// below 18% middle gray are encoded as negative ACEScc values.\n\t// These values should be preserved per the encoding in Section 4.4\n\t// so that all positive ACES values are maintained.\"\n\tcoords: {\n\t\tr: {\n\t\t\trange: [ACES_min_nonzero, ACES_cc_max],\n\t\t\tname: \"Red\"\n\t\t},\n\t\tg: {\n\t\t\trange: [ACES_min_nonzero, ACES_cc_max],\n\t\t\tname: \"Green\"\n\t\t},\n\t\tb: {\n\t\t\trange: [ACES_min_nonzero, ACES_cc_max],\n\t\t\tname: \"Blue\"\n\t\t}\n\t},\n\treferred: \"scene\",\n\n\tbase: ACEScg,\n\t// from section 4.4.2 Decoding Function\n\ttoBase (RGB) {\n\t\tconst low = (9.72 - 15) / 17.52; // -0.3014\n\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val <= low) {\n\t\t\t\treturn (2 ** ((val * 17.52) - 9.72) - ε) * 2; // very low values, below -0.3014\n\t\t\t}\n\t\t\telse if (val < ACES_cc_max) {\n\t\t\t\treturn 2 ** ((val * 17.52) - 9.72);\n\t\t\t}\n\t\t\telse { // val >= ACES_cc_max\n\t\t\t\treturn 65504;\n\t\t\t}\n\t\t});\n\t},\n\n\t// Non-linear encoding function from S-2014-003, section 4.4.1 Encoding Function\n\tfromBase (RGB) {\n\t\treturn RGB.map(function (val) {\n\t\t\tif (val <= 0) {\n\t\t\t\treturn (Math.log2(ε) + 9.72) / 17.52; // -0.3584\n\t\t\t}\n\t\t\telse if (val < ε) {\n\t\t\t\treturn (Math.log2(ε + val * 0.5) + 9.72) / 17.52;\n\t\t\t}\n\t\t\telse { // val >= ε\n\t\t\t\treturn (Math.log2(val) + 9.72) / 17.52;\n\t\t\t}\n\t\t});\n\t},\n\t// encoded media white (rgb 1,1,1) => linear [ 222.861, 222.861, 222.861 ]\n\t// encoded media black (rgb 0,0,0) => linear [ 0.0011857, 0.0011857, 0.0011857]\n\tformats: {\n\t\tcolor: {}\n\t}\n});\n","import * as util from \"./util.js\";\nimport hooks from \"./hooks.js\";\nimport defaults from \"./defaults.js\";\nimport ColorSpace from \"./space.js\";\nimport {WHITES} from \"./adapt.js\";\nimport {\n\tgetColor,\n\tparse,\n\tto,\n\tserialize,\n\tinGamut,\n\ttoGamut,\n\tdistance,\n\tequals,\n\tget,\n\tgetAll,\n\tset,\n\tsetAll,\n\tdisplay,\n} from \"./index-fn.js\";\n\n\nimport \"./spaces/xyz-d50.js\";\nimport \"./spaces/srgb.js\";\n\n/**\n * Class that represents a color\n */\nexport default class Color {\n\t/**\n\t * Creates an instance of Color.\n\t * Signatures:\n\t * - `new Color(stringToParse)`\n\t * - `new Color(otherColor)`\n\t * - `new Color({space, coords, alpha})`\n\t * - `new Color(space, coords, alpha)`\n\t * - `new Color(spaceId, coords, alpha)`\n\t */\n\tconstructor (...args) {\n\t\tlet color;\n\n\t\tif (args.length === 1) {\n\t\t\tcolor = getColor(args[0]);\n\t\t}\n\n\t\tlet space, coords, alpha;\n\n\t\tif (color) {\n\t\t\tspace = color.space || color.spaceId;\n\t\t\tcoords = color.coords;\n\t\t\talpha = color.alpha;\n\t\t}\n\t\telse {\n\t\t\t// default signature new Color(ColorSpace, array [, alpha])\n\t\t\t[space, coords, alpha] = args;\n\t\t}\n\n\t\tthis.#space = ColorSpace.get(space);\n\t\tthis.coords = coords? coords.slice() : [0, 0, 0];\n\t\tthis.alpha = alpha < 1? alpha : 1; // this also deals with NaN etc\n\n\t\t// Convert \"NaN\" to NaN\n\t\tfor (let i = 0; i < this.coords.length; i++) {\n\t\t\tif (this.coords[i] === \"NaN\") {\n\t\t\t\tthis.coords[i] = NaN;\n\t\t\t}\n\t\t}\n\n\t\t// Define getters and setters for each coordinate\n\t\tfor (let id in this.#space.coords) {\n\t\t\tObject.defineProperty(this, id, {\n\t\t\t\tget: () => this.get(id),\n\t\t\t\tset: value => this.set(id, value)\n\t\t\t});\n\t\t}\n\t}\n\n\t#space\n\n\tget space() {\n\t\treturn this.#space;\n\t}\n\n\tget spaceId() {\n\t\treturn this.#space.id;\n\t}\n\n\tclone () {\n\t\treturn new Color(this.space, this.coords, this.alpha);\n\t}\n\n\ttoJSON () {\n\t\treturn {\n\t\t\tspaceId: this.spaceId,\n\t\t\tcoords: this.coords,\n\t\t\talpha: this.alpha\n\t\t};\n\t}\n\n\tdisplay (...args) {\n\t\tlet ret = display(this, ...args);\n\n\t\t// Convert color object to Color instance\n\t\tret.color = new Color(ret.color);\n\n\t\treturn ret;\n\t}\n\n\t/**\n\t * Get a color from the argument passed\n\t * Basically gets us the same result as new Color(color) but doesn't clone an existing color object\n\t */\n\tstatic get (color, ...args) {\n\t\tif (color instanceof Color) {\n\t\t\treturn color;\n\t\t}\n\n\t\treturn new Color(color, ...args);\n\t}\n\n\tstatic defineFunction (name, code, o = code) {\n\t\tif (arguments.length === 1) {\n\t\t\t[name, code, o] = [arguments[0].name, arguments[0], arguments[0]];\n\t\t}\n\n\t\tlet {instance = true, returns} = o;\n\n\t\tlet func = function (...args) {\n\t\t\tlet ret = code(...args);\n\n\t\t\tif (returns === \"color\") {\n\t\t\t\tret = Color.get(ret);\n\t\t\t}\n\t\t\telse if (returns === \"function\") {\n\t\t\t\tlet f = ret;\n\t\t\t\tret = function(...args) {\n\t\t\t\t\tlet ret = f(...args);\n\t\t\t\t\treturn Color.get(ret);\n\t\t\t\t}\n\t\t\t\t// Copy any function metadata\n\t\t\t\tObject.assign(ret, f);\n\t\t\t}\n\t\t\telse if (returns === \"array\") {\n\t\t\t\tret = ret.map(c => Color.get(c));\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tif (!(name in Color)) {\n\t\t\tColor[name] = func;\n\t\t}\n\n\t\tif (instance) {\n\t\t\tColor.prototype[name] = function (...args) {\n\t\t\t\treturn func(this, ...args);\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic defineFunctions(o) {\n\t\tfor (let name in o) {\n\t\t\tColor.defineFunction(name, o[name], o[name]);\n\t\t}\n\t}\n\n\tstatic extend (exports) {\n\t\tif (exports.register) {\n\t\t\texports.register(Color);\n\t\t}\n\t\telse if (exports.default) {\n\t\t\tColor.defineFunction(exports.default.name, exports.default);\n\t\t}\n\t\telse if (typeof exports === \"function\") {\n\t\t\tColor.defineFunction(exports);\n\t\t}\n\t\telse {\n\t\t\t// No register method, just add the module's functions\n\t\t\tfor (let name in exports) {\n\t\t\t\tColor.defineFunction(name, exports[name]);\n\t\t\t}\n\t\t}\n\t}\n};\n\nColor.defineFunctions({\n\tget,\n\tgetAll,\n\tset,\n\tsetAll,\n\tto,\n\tequals,\n\tinGamut,\n\ttoGamut,\n\tdistance,\n\ttoString: serialize,\n});\n\nObject.assign(Color, {\n\tutil,\n\thooks,\n\tWHITES,\n\tSpace: ColorSpace,\n\tspaces: ColorSpace.registry,\n\tparse,\n\n\t// Global defaults one may want to configure\n\tdefaults\n});\n\n\n","import getColor from \"./getColor.js\";\n\nexport default function equals (color1, color2) {\n\tcolor1 = getColor(color1);\n\tcolor2 = getColor(color2);\n\n\treturn color1.space === color2.space\n\t\t && color1.alpha === color2.alpha\n\t\t && color1.coords.every((c, i) => c === color2.coords[i]);\n}","import ColorSpace from \"../space.js\";\nimport * as spaces from \"./index-fn.js\";\n\nexport * as spaces from \"./index-fn.js\";\n\nfor (let key of Object.keys(spaces)) {\n\tColorSpace.register(spaces[key]);\n}\n","/**\n * This plugin defines getters and setters for color[spaceId]\n * e.g. color.lch on *any* color gives us the lch coords\n */\nimport ColorSpace from \"./space.js\";\nimport Color from \"./color.js\";\nimport hooks from \"./hooks.js\";\n\n// Add space accessors to existing color spaces\nfor (let id in ColorSpace.registry) {\n\taddSpaceAccessors(id, ColorSpace.registry[id]);\n}\n\n// Add space accessors to color spaces not yet created\nhooks.add(\"colorspace-init-end\", addSpaceAccessors);\n\nfunction addSpaceAccessors (id, space) {\n\t// Coordinates can be looked up by both id and name\n\tlet coordIds = Object.keys(space.coords);\n\tlet coordNames = Object.values(space.coords).map(c => c.name);\n\n\n\tlet propId = id.replace(/-/g, \"_\");\n\n\tObject.defineProperty(Color.prototype, propId, {\n\t\t// Convert coords to coords in another colorspace and return them\n\t\t// Source colorspace: this.spaceId\n\t\t// Target colorspace: id\n\t\tget () {\n\t\t\tlet ret = this.getAll(id);\n\n\t\t\tif (typeof Proxy === \"undefined\") {\n\t\t\t\t// If proxies are not supported, just return a static array\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Enable color.spaceId.coordName syntax\n\t\t\treturn new Proxy(ret, {\n\t\t\t\thas: (obj, property) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tColorSpace.resolveCoord([space, property]);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tcatch(e) {}\n\n\t\t\t\t\treturn Reflect.has(obj, property);\n\t\t\t\t},\n\t\t\t\tget: (obj, property, receiver) => {\n\t\t\t\t\tif (property && typeof property !== \"symbol\" && !(property in obj)) {\n\t\t\t\t\t\tlet {index} = ColorSpace.resolveCoord([space, property]);\n\n\t\t\t\t\t\tif (index >= 0) {\n\t\t\t\t\t\t\treturn obj[index];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Reflect.get(obj, property, receiver);\n\t\t\t\t},\n\t\t\t\tset: (obj, property, value, receiver) => {\n\t\t\t\t\tif (property && typeof property !== \"symbol\" && !(property in obj) || property >= 0) {\n\t\t\t\t\t\tlet {index} = ColorSpace.resolveCoord([space, property]);\n\n\t\t\t\t\t\tif (index >= 0) {\n\t\t\t\t\t\t\tobj[index] = value;\n\n\t\t\t\t\t\t\t// Update color.coords\n\t\t\t\t\t\t\tthis.setAll(id, obj);\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Reflect.set(obj, property, value, receiver);\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\t// Convert coords in another colorspace to internal coords and set them\n\t\t// Target colorspace: this.spaceId\n\t\t// Source colorspace: id\n\t\tset (coords) {\n\t\t\tthis.setAll(id, coords);\n\t\t},\n\t\tconfigurable: true,\n\t\tenumerable: true\n\t});\n}","// Import all modules of Color.js\nimport Color from \"./color.js\";\n\n// Import all color spaces\nimport \"./spaces/index.js\";\n\n// Import all DeltaE methods\nimport * as deltaE from \"./deltaE.js\";\nimport * as deltaEMethods from \"./deltaE/index.js\";\n\nColor.extend(deltaEMethods);\nColor.extend(deltaE);\n\n// Import optional modules\nimport * as variations from \"./variations.js\";\nColor.extend(variations);\n\nimport contrast from \"./contrast.js\";\nColor.extend(contrast);\n\nimport * as chromaticity from \"./chromaticity.js\";\nColor.extend(chromaticity);\n\nimport * as luminance from \"./luminance.js\";\nColor.extend(luminance);\n\nimport * as interpolation from \"./interpolation.js\";\nColor.extend(interpolation);\n\nimport * as contrastMethods from \"./contrast/index.js\";\nColor.extend(contrastMethods);\n\nimport \"./CATs.js\";\nimport \"./space-accessors.js\";\n\n// Re-export everything\nexport default Color;\n","import getColor from \"./getColor.js\";\n// import defaults from \"./defaults.js\";\nimport {isString} from \"./util.js\";\nimport * as contrastAlgorithms from \"./contrast/index.js\";\n\nexport default function contrast (background, foreground, o = {}) {\n\tif (isString(o)) {\n\t\to = {algorithm: o};\n\t}\n\n\tlet {algorithm, ...rest} = o;\n\n\tif (!algorithm) {\n\t\tlet algorithms = Object.keys(contrastAlgorithms).map(a => a.replace(/^contrast/, \"\")).join(\", \");\n\t\tthrow new TypeError(`contrast() function needs a contrast algorithm. Please specify one of: ${algorithms}`);\n\t}\n\n\tbackground = getColor(background);\n\tforeground = getColor(foreground);\n\n\tfor (let a in contrastAlgorithms) {\n\t\tif (\"contrast\" + algorithm.toLowerCase() === a.toLowerCase()) {\n\t\t\treturn contrastAlgorithms[a](background, foreground, rest);\n\t\t}\n\t}\n\n\tthrow new TypeError(`Unknown contrast algorithm: ${algorithm}`);\n};","import styles from './progress.module.css'\nimport Color from 'colorjs.io'\nimport animationDataDesktop from './nrk_progress_desktop.json'\nimport animationDataMobile from './nrk_progress_mobile.json'\nimport lottie from 'lottie-web'\nimport lottieApi from 'lottie-api'\nimport clone from 'fast-clone'\n\nconst END_OF_FADEIN = 4\nconst END_OF_TRANSITION = 14\nconst END_OF_PROGRESS = 51\nconst END_OF_OUTRO = 59\n\nconst MIX_CONFIG = {\n space: 'oklch',\n outputSpace: 'srgb',\n}\n\nexport class ProgressPlayer {\n #textColor\n #textColorDirty = false\n #disconnected = false\n #animation\n #currentAnimationType\n #lottieContainer\n\n constructor() {\n this.#lottieContainer = document.createElement('div')\n this.#lottieContainer.classList.add(styles.progressContainer)\n this.#lottieContainer.style.contain = 'paint layout inline-size paint style'\n const progressGrid = document.createElement('div')\n progressGrid.classList.add(styles.progressGrid)\n progressGrid.prepend(this.#lottieContainer)\n document.body.prepend(progressGrid)\n\n /* Sync text color with the current section */\n this.#textColor = this.#getSectionColor()\n this.#textColorDirty = true\n this.#syncColor()\n\n this.#currentAnimationType = this.#getAnimationType()\n this.#loadAnimation()\n\n window.addEventListener('resize', this.#handleResize)\n }\n\n #loadAnimation() {\n let resume, currentFrame, isPlaying\n if (this.#animation) {\n resume = true\n currentFrame = this.#animation.currentFrame\n isPlaying = !this.#animation.isPaused\n this.#animation.destroy()\n }\n\n this.#animation = lottie.loadAnimation({\n container: this.#lottieContainer,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n animationData:\n this.#currentAnimationType === 'mobile'\n ? clone(animationDataMobile)\n : clone(animationDataDesktop),\n rendererSettings: {\n preserveAspectRatio: 'xMidYMid meet',\n },\n })\n const animationApi = lottieApi.createAnimationApi(this.#animation)\n const keyPath = animationApi\n .getKeyPath('N1,Contents,Group 1,Fill 1,Color')\n .concat(animationApi.getKeyPath('N2,Contents,Group 1,Fill 1,Color'))\n .concat(animationApi.getKeyPath('R1,Contents,Group 1,Fill 1,Color'))\n .concat(animationApi.getKeyPath('R2,Contents,Group 1,Fill 1,Color'))\n .concat(animationApi.getKeyPath('K1,Contents,Group 1,Fill 1,Color'))\n .concat(animationApi.getKeyPath('K2,Contents,Group 1,Fill 1,Color'))\n .concat(animationApi.getKeyPath('K3,Contents,Group 1,Fill 1,Color'))\n\n animationApi.addValueCallback(keyPath, ([, , , a]) => {\n const { r, g, b } = this.#textColor\n return [r, g, b, a]\n })\n\n if (resume) {\n if (isPlaying) {\n this.#animation.goToAndPlay(currentFrame, true)\n } else {\n this.#animation.goToAndStop(currentFrame, true)\n }\n }\n }\n\n #getAnimationType() {\n if (window.matchMedia('(min-width:1280px)').matches) {\n return 'desktop'\n } else {\n return 'mobile'\n }\n }\n\n #handleResize = () => {\n const animationType = this.#getAnimationType()\n if (this.#currentAnimationType !== animationType) {\n this.#currentAnimationType = animationType\n this.#loadAnimation()\n }\n }\n\n #syncColor() {\n const updateColorLoop = () => {\n const targetColor = this.#getSectionColor()\n if (targetColor) {\n const isTargetColor = this.#textColor.distance(targetColor, 'srgb') > 0.1\n if (isTargetColor) {\n this.#textColor = Color.mix(this.#textColor, targetColor, 0.1, MIX_CONFIG)\n this.#textColorDirty = true\n } else {\n this.#textColorDirty = false\n }\n }\n if (!this.#disconnected) {\n requestAnimationFrame(updateColorLoop)\n }\n }\n requestAnimationFrame(updateColorLoop)\n }\n\n #getSectionColor() {\n const bcRect = this.#lottieContainer.getBoundingClientRect()\n const elements = document.elementsFromPoint(bcRect.left, bcRect.top)\n const section = elements.find((element) => element.className?.includes?.('dh-sa-section'))\n if (section) {\n return new Color(getComputedStyle(section).color)\n }\n }\n\n async playUntil(target, direction) {\n return new Promise((resolve) => {\n const loop = () => {\n if (direction * (target - this.#animation.currentFrame) < 0.5) {\n this.#animation.goToAndStop(target, true)\n resolve()\n } else {\n requestAnimationFrame(loop)\n }\n }\n requestAnimationFrame(loop)\n this.#animation.setDirection(direction)\n this.#animation.play()\n })\n }\n\n async waitUntil(check) {\n return new Promise((resolve) => {\n const loop = () => {\n if (this.#textColorDirty) {\n // Force repaint to update to current text color\n // Lottie will not repaint if it is the same frame\n const currentFrame = this.#animation.currentFrame\n this.#animation.goToAndStop(0, true)\n this.#animation.goToAndStop(currentFrame, true)\n }\n if (check()) {\n setTimeout(resolve, 100)\n } else {\n requestAnimationFrame(loop)\n }\n }\n requestAnimationFrame(loop)\n })\n }\n\n async updateProgress(getArticleProgress) {\n const firstFrame = END_OF_TRANSITION\n const lastFrame = END_OF_PROGRESS\n return new Promise((resolve) => {\n const loop = () => {\n const articleProgress = getArticleProgress()\n\n const targetFrame = interpolate(articleProgress, firstFrame, lastFrame)\n const nextFrame = interpolate(0.3, this.#animation.currentFrame, targetFrame)\n this.#animation.goToAndStop(nextFrame, true)\n\n if (articleProgress === 0 && Math.round(nextFrame) === firstFrame) {\n this.#animation.goToAndStop(targetFrame, true)\n return resolve('before')\n } else if (articleProgress === 1 && Math.round(nextFrame) === lastFrame) {\n this.#animation.goToAndStop(targetFrame, true)\n return resolve('after')\n } else {\n requestAnimationFrame(loop)\n }\n }\n requestAnimationFrame(loop)\n })\n }\n\n async fadeIn() {\n return this.playUntil(END_OF_FADEIN, 1)\n }\n\n async transitionToArticleProgress() {\n return this.playUntil(END_OF_TRANSITION, 1)\n }\n\n async reverseTransitionToIntro() {\n return this.playUntil(END_OF_FADEIN, -1)\n }\n\n async playOutro() {\n return this.playUntil(END_OF_OUTRO, 1)\n }\n\n async reverseOutro() {\n return this.playUntil(END_OF_PROGRESS, -1)\n }\n\n skipToEnd() {\n this.#animation.goToAndStop(END_OF_OUTRO, true)\n }\n\n skipToIntro() {\n this.#animation.goToAndStop(END_OF_FADEIN, true)\n }\n\n disconnect() {\n this.#animation.disconnect()\n window.removeEventListener('resize', this.#handleResize)\n this.#disconnected = true\n }\n}\n\nfunction interpolate(progress, start, end) {\n return progress * end + (1 - progress) * start\n}\n","import hydrateMarker from './marker'\nimport hydrateFokus from './fokus'\nimport hydrateTitles from './titles'\nimport { hydrateProgress } from './progress'\nimport './padding.module.css'\nimport './lydlogg.module.css'\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport default function hydrate(el, props) {\n let disconnectProgress\n window?.addEventListener('DOMContentLoaded', () => {\n hydrateMarker()\n hydrateFokus()\n hydrateTitles()\n setTimeout(() => {\n disconnectProgress = hydrateProgress()\n }, 100)\n })\n\n return () => {\n disconnectProgress()\n }\n}\n","import styles from './marker.module.css'\n\nexport default function hydrateMarker() {\n const largeTexts = document.querySelectorAll('.avslort-marker .dh-sa-large-text')\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n entry.target.classList.add(styles.visible)\n observer.unobserve(entry.target)\n }\n }\n },\n {\n threshold: 1,\n rootMargin: '-10% 0px -30% 0px',\n }\n )\n for (const text of largeTexts) {\n observer.observe(text)\n }\n}\n","import styles from './fokus.module.css'\n\nexport default function hydrateFokus() {\n const largeTexts = document.querySelectorAll('.avslort-fokus .dh-sa-large-text')\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n entry.target.classList.add(styles.visible)\n observer.unobserve(entry.target)\n }\n }\n },\n {\n threshold: 1,\n rootMargin: '-10% 0px -40% 0px',\n }\n )\n for (const text of largeTexts) {\n observer.observe(text)\n }\n\n return () => {\n observer.disconnect()\n }\n}\n","import styles from './titles.module.css'\n\nexport default function hydrateTitles() {\n if (!document.body.animate || window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return\n }\n\n const titles = document.querySelectorAll('.dh-sa-text > h2,.dh-sa-text > h3')\n for (const title of titles) {\n title.innerHTML = `${\n title.textContent\n }`\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n if (entry.target.classList.contains(styles.visible)) {\n continue\n }\n entry.target.classList.add(styles.visible)\n observer.unobserve(entry.target)\n }\n }\n },\n {\n threshold: 1,\n rootMargin: '-10% 0px -25% 0px',\n }\n )\n for (const title of titles) {\n observer.observe(title)\n }\n}\n","import { trackProgress } from './progress-tracker'\nimport { ProgressPlayer } from './progress-player'\n\nexport async function hydrateProgress() {\n const progressTracker = trackProgress()\n const player = new ProgressPlayer()\n const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches\n\n let state = reducedMotion ? 'reduced-motion' : 'initial'\n const nextState = async () => {\n switch (state) {\n case 'initial':\n await player.fadeIn()\n return 'intro'\n case 'intro':\n await player.waitUntil(() => progressTracker.afterArticleStart())\n if (progressTracker.passedOutroStart()) {\n player.skipToEnd()\n return 'end'\n } else {\n return 'transition-to-body'\n }\n case 'transition-to-body':\n await player.transitionToArticleProgress()\n return 'in-article'\n case 'in-article':\n if (\n (await player.updateProgress(() => progressTracker.calculateArticleProgress())) ===\n 'before'\n ) {\n return 'transition-to-intro'\n } else {\n return 'completed'\n }\n case 'transition-to-intro':\n await player.reverseTransitionToIntro()\n return 'intro'\n case 'completed':\n await player.waitUntil(\n () => progressTracker.passedOutroStart() || progressTracker.beforeArticleEnd()\n )\n if (progressTracker.beforeArticleEnd()) {\n return 'in-article'\n } else {\n return 'outro'\n }\n case 'outro':\n await player.playOutro()\n return 'end'\n case 'end':\n await player.waitUntil(() => progressTracker.beforeArticleEnd())\n if (progressTracker.beforeArticleStart()) {\n player.skipToIntro()\n return 'intro'\n } else {\n return 'end-to-article'\n }\n case 'end-to-article':\n await player.reverseOutro()\n return 'in-article'\n case 'reduced-motion':\n player.skipToIntro()\n await player.waitUntil(() => false)\n }\n }\n\n let syncState = true\n while (syncState) {\n state = await nextState()\n }\n\n return () => {\n syncState = false\n player.disconnect()\n progressTracker.disconnect()\n }\n}\n","import { BaseElement } from '@nrk/dh-server-libs/base-element'\nimport { getElementTag } from '../lib/get-element-tag'\n\nimport hydrate from './components/hydrate'\n\nconst tag = getElementTag(__APP_NAME__, 'tema', __APP_VERSION__)\nclass AppElement extends BaseElement {\n name = tag\n #disconnect\n\n connectedCallback() {\n super.connectedCallback?.()\n this.#disconnect = hydrate(this, this.preloadedState)\n }\n\n disconnectedCallback() {\n // @ts-ignore\n super.disconnectedCallback?.()\n this.#disconnect()\n }\n\n render() {\n this.sendGaEvent({ eventAction: `MOUNT:${tag}` })\n }\n}\n\nif (!customElements.get(tag)) {\n customElements.define(tag, AppElement)\n}\n","export function getElementTag(name, entry, version) {\n const formattedVersion = version ? `v${version.split('.')[0]}` : ''\n return `${name}-${entry}-${formattedVersion}`\n}\n","\"use strict\";\nvar windowOrGlobal = Function('return this')();\n(function (root) {\n /* istanbul ignore next */\n if (typeof exports !== 'undefined') {\n /* istanbul ignore next */\n if (typeof module !== 'undefined' && module && module.exports) {\n exports = module.exports = clone;\n }\n exports.clone = clone;\n }\n else {\n /* istanbul ignore next */\n root.clone = clone;\n }\n function clone(value) {\n var type = typeof value;\n switch (type) {\n case 'object':\n // null and undefined\n if (value == null) {\n return value;\n }\n var result = void 0;\n if (value instanceof Date) {\n result = new Date();\n result.setTime(value.getTime());\n return result;\n }\n else if (value instanceof RegExp) {\n result = newRegExp(value);\n return result;\n }\n result = JSON.parse(JSON.stringify(value));\n fixTypes(value, result);\n return result;\n default:\n return value;\n }\n }\n function fixPropertyValue(original, copy, key) {\n var originalValue = original[key];\n var originalType = typeof originalValue;\n switch (originalType) {\n case 'object':\n if (originalValue instanceof Date) {\n var newValue = new Date();\n newValue.setTime(originalValue.getTime());\n copy[key] = newValue;\n }\n else if (originalValue instanceof RegExp) {\n copy[key] = newRegExp(originalValue);\n }\n else if (originalValue == null) {\n copy[key] = originalValue;\n }\n else {\n fixTypes(originalValue, copy[key]);\n }\n break;\n case 'number':\n if (isNaN(originalValue)) {\n copy[key] = NaN;\n }\n else if (originalValue == Infinity) {\n copy[key] = Infinity;\n }\n break;\n default:\n break;\n }\n }\n function fixTypes(original, copy) {\n if (original instanceof Array) {\n for (var index = 0; index < original.length; index++) {\n fixPropertyValue(original, copy, index);\n }\n }\n else {\n var keys = Object.getOwnPropertyNames(original);\n keys.forEach(function (key) {\n fixPropertyValue(original, copy, key);\n });\n }\n }\n function newRegExp(value) {\n var regexpText = String(value);\n var slashIndex = regexpText.lastIndexOf('/');\n return new RegExp(regexpText.slice(1, slashIndex), regexpText.slice(slashIndex + 1));\n }\n})(windowOrGlobal);\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.lottie_api = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i compRel ? elementHeight / compHeight : elementWidth / compWidth;\r\n\t\t} else {\r\n\t\t\tscale = elementRel > compRel ? elementWidth / compWidth : elementHeight / compHeight;\r\n\t\t}\r\n\t\txAlignment = aspectRatio[0].substr(0, 4);\r\n\t\tyAlignment = aspectRatio[0].substr(4);\r\n\t\tif (xAlignment === 'xMin') {\r\n\t\t\tscaleXOffset = 0;\r\n\t\t} else if (xAlignment === 'xMid') {\r\n\t\t\tscaleXOffset = (elementWidth - compWidth * scale) / 2;\r\n\t\t} else {\r\n\t\t\tscaleXOffset = elementWidth - compWidth * scale;\r\n\t\t}\r\n\r\n\t\tif (yAlignment === 'YMin') {\r\n\t\t\tscaleYOffset = 0;\r\n\t\t} else if (yAlignment === 'YMid') {\r\n\t\t\tscaleYOffset = (elementHeight - compHeight * scale) / 2;\r\n\t\t} else {\r\n\t\t\tscaleYOffset = elementHeight - compHeight * scale;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tscaleYOffset: scaleYOffset,\r\n\t\t\tscaleXOffset: scaleXOffset,\r\n\t\t\tscale: scale\r\n\t\t};\r\n\t}\r\n\r\n\tfunction recalculateSize(container) {\r\n\t\tvar container = animation.wrapper;\r\n\t\tstate.boundingRect = container.getBoundingClientRect();\r\n\t\tstate.scaleData = calculateScaleData(state.boundingRect);\r\n\t}\r\n\r\n\tfunction toContainerPoint(point) {\r\n\t\tif (!animation.wrapper || !animation.wrapper.getBoundingClientRect) {\r\n\t\t\treturn point;\r\n\t\t}\r\n\t\tif (!state.boundingRect) {\r\n\t\t\trecalculateSize();\r\n\t\t}\r\n\r\n\t\tvar boundingRect = state.boundingRect;\r\n\t\tvar newPoint = [point[0] - boundingRect.left, point[1] - boundingRect.top];\r\n\t\tvar scaleData = state.scaleData;\r\n\r\n\t\tnewPoint[0] = (newPoint[0] - scaleData.scaleXOffset) / scaleData.scale;\r\n\t\tnewPoint[1] = (newPoint[1] - scaleData.scaleYOffset) / scaleData.scale;\r\n\r\n\t\treturn newPoint;\r\n\t}\r\n\r\n\tfunction fromContainerPoint(point) {\r\n\t\tif (!animation.wrapper || !animation.wrapper.getBoundingClientRect) {\r\n\t\t\treturn point;\r\n\t\t}\r\n\t\tif (!state.boundingRect) {\r\n\t\t\trecalculateSize();\r\n\t\t}\r\n\t\tvar boundingRect = state.boundingRect;\r\n\t\tvar scaleData = state.scaleData;\r\n\r\n\t\tvar newPoint = [point[0] * scaleData.scale + scaleData.scaleXOffset, point[1] * scaleData.scale + scaleData.scaleYOffset];\r\n\r\n\t\tvar newPoint = [newPoint[0] + boundingRect.left, newPoint[1] + boundingRect.top];\r\n\t\treturn newPoint;\r\n\t}\r\n\r\n\tfunction getScaleData() {\r\n\t\treturn state.scaleData;\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\trecalculateSize: recalculateSize,\r\n\t\tgetScaleData: getScaleData,\r\n\t\ttoContainerPoint: toContainerPoint,\r\n\t\tfromContainerPoint: fromContainerPoint,\r\n\t\tgetCurrentFrame: getCurrentFrame,\r\n\t\tgetCurrentTime: getCurrentTime,\r\n\t\taddValueCallback: addValueCallback,\r\n\t\ttoKeypathLayerPoint: toKeypathLayerPoint,\r\n\t\tfromKeypathLayerPoint: fromKeypathLayerPoint\r\n\t};\r\n\r\n\treturn Object.assign({}, Renderer(state), methods);\r\n}\r\n\r\nmodule.exports = AnimationItemFactory;\r\n\r\n},{\"../helpers/layerAPIBuilder\":6,\"../renderer/Renderer\":42}],2:[function(require,module,exports){\r\n'use strict';\r\n\r\nmodule.exports = ',';\r\n\r\n},{}],3:[function(require,module,exports){\r\n'use strict';\r\n\r\nmodule.exports = {\r\n\t0: 0,\r\n\t1: 1,\r\n\t2: 2,\r\n\t3: 3,\r\n\t4: 4,\r\n\t5: 5,\r\n\t13: 13,\r\n\t'comp': 0,\r\n\t'composition': 0,\r\n\t'solid': 1,\r\n\t'image': 2,\r\n\t'null': 3,\r\n\t'shape': 4,\r\n\t'text': 5,\r\n\t'camera': 13\r\n};\r\n\r\n},{}],4:[function(require,module,exports){\r\n'use strict';\r\n\r\nmodule.exports = {\r\n\tLAYER_TRANSFORM: 'transform'\r\n};\r\n\r\n},{}],5:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar key_path_separator = require('../enums/key_path_separator');\r\nvar sanitizeString = require('./stringSanitizer');\r\n\r\nmodule.exports = function (propertyPath) {\r\n\tvar keyPathSplit = propertyPath.split(key_path_separator);\r\n\tvar selector = keyPathSplit.shift();\r\n\treturn {\r\n\t\tselector: sanitizeString(selector),\r\n\t\tpropertyPath: keyPathSplit.join(key_path_separator)\r\n\t};\r\n};\r\n\r\n},{\"../enums/key_path_separator\":2,\"./stringSanitizer\":7}],6:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar TextElement = require('../layer/text/TextElement');\r\nvar ShapeElement = require('../layer/shape/Shape');\r\nvar NullElement = require('../layer/null_element/NullElement');\r\nvar SolidElement = require('../layer/solid/SolidElement');\r\nvar ImageElement = require('../layer/image/ImageElement');\r\nvar CameraElement = require('../layer/camera/Camera');\r\nvar LayerBase = require('../layer/LayerBase');\r\n\r\nmodule.exports = function getLayerApi(element, parent) {\r\n\tvar layerType = element.data.ty;\r\n\tvar Composition = require('../layer/composition/Composition');\r\n\tswitch (layerType) {\r\n\t\tcase 0:\r\n\t\t\treturn Composition(element, parent);\r\n\t\tcase 1:\r\n\t\t\treturn SolidElement(element, parent);\r\n\t\tcase 2:\r\n\t\t\treturn ImageElement(element, parent);\r\n\t\tcase 3:\r\n\t\t\treturn NullElement(element, parent);\r\n\t\tcase 4:\r\n\t\t\treturn ShapeElement(element, parent, element.data.shapes, element.itemsData);\r\n\t\tcase 5:\r\n\t\t\treturn TextElement(element, parent);\r\n\t\tcase 13:\r\n\t\t\treturn CameraElement(element, parent);\r\n\t\tdefault:\r\n\t\t\treturn LayerBase(element, parent);\r\n\t}\r\n};\r\n\r\n},{\"../layer/LayerBase\":13,\"../layer/camera/Camera\":15,\"../layer/composition/Composition\":16,\"../layer/image/ImageElement\":20,\"../layer/null_element/NullElement\":21,\"../layer/shape/Shape\":22,\"../layer/solid/SolidElement\":35,\"../layer/text/TextElement\":38}],7:[function(require,module,exports){\r\n\"use strict\";\r\n\r\nfunction sanitizeString(string) {\r\n\treturn string.trim();\r\n}\r\n\r\nmodule.exports = sanitizeString;\r\n\r\n},{}],8:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar createTypedArray = require('./typedArrays');\r\n\r\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 */\r\n\r\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 */\r\n\r\nvar Matrix = function () {\r\n\r\n var _cos = Math.cos;\r\n var _sin = Math.sin;\r\n var _tan = Math.tan;\r\n var _rnd = Math.round;\r\n\r\n function reset() {\r\n this.props[0] = 1;\r\n this.props[1] = 0;\r\n this.props[2] = 0;\r\n this.props[3] = 0;\r\n this.props[4] = 0;\r\n this.props[5] = 1;\r\n this.props[6] = 0;\r\n this.props[7] = 0;\r\n this.props[8] = 0;\r\n this.props[9] = 0;\r\n this.props[10] = 1;\r\n this.props[11] = 0;\r\n this.props[12] = 0;\r\n this.props[13] = 0;\r\n this.props[14] = 0;\r\n this.props[15] = 1;\r\n return this;\r\n }\r\n\r\n function rotate(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateX(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateY(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function rotateZ(angle) {\r\n if (angle === 0) {\r\n return this;\r\n }\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function shear(sx, sy) {\r\n return this._t(1, sy, sx, 1, 0, 0);\r\n }\r\n\r\n function skew(ax, ay) {\r\n return this.shear(_tan(ax), _tan(ay));\r\n }\r\n\r\n function skewFromAxis(ax, angle) {\r\n var mCos = _cos(angle);\r\n var mSin = _sin(angle);\r\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);\r\n //return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\r\n }\r\n\r\n function scale(sx, sy, sz) {\r\n sz = isNaN(sz) ? 1 : sz;\r\n if (sx == 1 && sy == 1 && sz == 1) {\r\n return this;\r\n }\r\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\r\n this.props[0] = a;\r\n this.props[1] = b;\r\n this.props[2] = c;\r\n this.props[3] = d;\r\n this.props[4] = e;\r\n this.props[5] = f;\r\n this.props[6] = g;\r\n this.props[7] = h;\r\n this.props[8] = i;\r\n this.props[9] = j;\r\n this.props[10] = k;\r\n this.props[11] = l;\r\n this.props[12] = m;\r\n this.props[13] = n;\r\n this.props[14] = o;\r\n this.props[15] = p;\r\n return this;\r\n }\r\n\r\n function translate(tx, ty, tz) {\r\n tz = tz || 0;\r\n if (tx !== 0 || ty !== 0 || tz !== 0) {\r\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\r\n }\r\n return this;\r\n }\r\n\r\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\r\n\r\n var _p = this.props;\r\n\r\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) {\r\n //NOTE: commenting this condition because TurboFan deoptimizes code when present\r\n //if(m2 !== 0 || n2 !== 0 || o2 !== 0){\r\n _p[12] = _p[12] * a2 + _p[15] * m2;\r\n _p[13] = _p[13] * f2 + _p[15] * n2;\r\n _p[14] = _p[14] * k2 + _p[15] * o2;\r\n _p[15] = _p[15] * p2;\r\n //}\r\n this._identityCalculated = false;\r\n return this;\r\n }\r\n\r\n var a1 = _p[0];\r\n var b1 = _p[1];\r\n var c1 = _p[2];\r\n var d1 = _p[3];\r\n var e1 = _p[4];\r\n var f1 = _p[5];\r\n var g1 = _p[6];\r\n var h1 = _p[7];\r\n var i1 = _p[8];\r\n var j1 = _p[9];\r\n var k1 = _p[10];\r\n var l1 = _p[11];\r\n var m1 = _p[12];\r\n var n1 = _p[13];\r\n var o1 = _p[14];\r\n var p1 = _p[15];\r\n\r\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\r\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\r\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\r\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\r\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\r\n\r\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\r\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\r\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\r\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\r\n\r\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\r\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\r\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\r\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\r\n\r\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\r\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\r\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\r\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\r\n\r\n this._identityCalculated = false;\r\n return this;\r\n }\r\n\r\n function isIdentity() {\r\n if (!this._identityCalculated) {\r\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);\r\n this._identityCalculated = true;\r\n }\r\n return this._identity;\r\n }\r\n\r\n function equals(matr) {\r\n var i = 0;\r\n while (i < 16) {\r\n if (matr.props[i] !== this.props[i]) {\r\n return false;\r\n }\r\n i += 1;\r\n }\r\n return true;\r\n }\r\n\r\n function clone(matr) {\r\n var i;\r\n for (i = 0; i < 16; i += 1) {\r\n matr.props[i] = this.props[i];\r\n }\r\n }\r\n\r\n function cloneFromProps(props) {\r\n var i;\r\n for (i = 0; i < 16; i += 1) {\r\n this.props[i] = props[i];\r\n }\r\n }\r\n\r\n function applyToPoint(x, y, z) {\r\n\r\n return {\r\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\r\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\r\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\r\n };\r\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 };*/\r\n }\r\n function applyToX(x, y, z) {\r\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\r\n }\r\n function applyToY(x, y, z) {\r\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\r\n }\r\n function applyToZ(x, y, z) {\r\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\r\n }\r\n\r\n function inversePoint(pt) {\r\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\r\n var a = this.props[5] / determinant;\r\n var b = -this.props[1] / determinant;\r\n var c = -this.props[4] / determinant;\r\n var d = this.props[0] / determinant;\r\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\r\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\r\n return [pt[0] * a + pt[1] * c + e, pt[0] * b + pt[1] * d + f, 0];\r\n }\r\n\r\n function inversePoints(pts) {\r\n var i,\r\n len = pts.length,\r\n retPts = [];\r\n for (i = 0; i < len; i += 1) {\r\n retPts[i] = inversePoint(pts[i]);\r\n }\r\n return retPts;\r\n }\r\n\r\n function applyToTriplePoints(pt1, pt2, pt3) {\r\n var arr = createTypedArray('float32', 6);\r\n if (this.isIdentity()) {\r\n arr[0] = pt1[0];\r\n arr[1] = pt1[1];\r\n arr[2] = pt2[0];\r\n arr[3] = pt2[1];\r\n arr[4] = pt3[0];\r\n arr[5] = pt3[1];\r\n } else {\r\n var p0 = this.props[0],\r\n p1 = this.props[1],\r\n p4 = this.props[4],\r\n p5 = this.props[5],\r\n p12 = this.props[12],\r\n p13 = this.props[13];\r\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\r\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\r\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\r\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\r\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\r\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\r\n }\r\n return arr;\r\n }\r\n\r\n function applyToPointArray(x, y, z) {\r\n var arr;\r\n if (this.isIdentity()) {\r\n arr = [x, y, z];\r\n } else {\r\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]];\r\n }\r\n return arr;\r\n }\r\n\r\n function applyToPointStringified(x, y) {\r\n if (this.isIdentity()) {\r\n return x + ',' + y;\r\n }\r\n return x * this.props[0] + y * this.props[4] + this.props[12] + ',' + (x * this.props[1] + y * this.props[5] + this.props[13]);\r\n }\r\n\r\n function toCSS() {\r\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.\r\n /*if(this.isIdentity()) {\r\n return '';\r\n }*/\r\n var i = 0;\r\n var props = this.props;\r\n var cssValue = 'matrix3d(';\r\n var v = 10000;\r\n while (i < 16) {\r\n cssValue += _rnd(props[i] * v) / v;\r\n cssValue += i === 15 ? ')' : ',';\r\n i += 1;\r\n }\r\n return cssValue;\r\n }\r\n\r\n function to2dCSS() {\r\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.\r\n /*if(this.isIdentity()) {\r\n return '';\r\n }*/\r\n var v = 10000;\r\n var props = this.props;\r\n return \"matrix(\" + _rnd(props[0] * v) / v + ',' + _rnd(props[1] * v) / v + ',' + _rnd(props[4] * v) / v + ',' + _rnd(props[5] * v) / v + ',' + _rnd(props[12] * v) / v + ',' + _rnd(props[13] * v) / v + \")\";\r\n }\r\n\r\n function MatrixInstance() {\r\n this.reset = reset;\r\n this.rotate = rotate;\r\n this.rotateX = rotateX;\r\n this.rotateY = rotateY;\r\n this.rotateZ = rotateZ;\r\n this.skew = skew;\r\n this.skewFromAxis = skewFromAxis;\r\n this.shear = shear;\r\n this.scale = scale;\r\n this.setTransform = setTransform;\r\n this.translate = translate;\r\n this.transform = transform;\r\n this.applyToPoint = applyToPoint;\r\n this.applyToX = applyToX;\r\n this.applyToY = applyToY;\r\n this.applyToZ = applyToZ;\r\n this.applyToPointArray = applyToPointArray;\r\n this.applyToTriplePoints = applyToTriplePoints;\r\n this.applyToPointStringified = applyToPointStringified;\r\n this.toCSS = toCSS;\r\n this.to2dCSS = to2dCSS;\r\n this.clone = clone;\r\n this.cloneFromProps = cloneFromProps;\r\n this.equals = equals;\r\n this.inversePoints = inversePoints;\r\n this.inversePoint = inversePoint;\r\n this._t = this.transform;\r\n this.isIdentity = isIdentity;\r\n this._identity = true;\r\n this._identityCalculated = false;\r\n\r\n this.props = createTypedArray('float32', 16);\r\n this.reset();\r\n };\r\n\r\n return function () {\r\n return new MatrixInstance();\r\n };\r\n}();\r\n\r\nmodule.exports = Matrix;\r\n\r\n},{\"./typedArrays\":9}],9:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar createTypedArray = function () {\r\n\tfunction createRegularArray(type, len) {\r\n\t\tvar i = 0,\r\n\t\t arr = [],\r\n\t\t value;\r\n\t\tswitch (type) {\r\n\t\t\tcase 'int16':\r\n\t\t\tcase 'uint8c':\r\n\t\t\t\tvalue = 1;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tvalue = 1.1;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tfor (i = 0; i < len; i += 1) {\r\n\t\t\tarr.push(value);\r\n\t\t}\r\n\t\treturn arr;\r\n\t}\r\n\tfunction createTypedArray(type, len) {\r\n\t\tif (type === 'float32') {\r\n\t\t\treturn new Float32Array(len);\r\n\t\t} else if (type === 'int16') {\r\n\t\t\treturn new Int16Array(len);\r\n\t\t} else if (type === 'uint8c') {\r\n\t\t\treturn new Uint8ClampedArray(len);\r\n\t\t}\r\n\t}\r\n\tif (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\r\n\t\treturn createTypedArray;\r\n\t} else {\r\n\t\treturn createRegularArray;\r\n\t}\r\n}();\r\n\r\nmodule.exports = createTypedArray;\r\n\r\n},{}],10:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar AnimationItem = require('./animation/AnimationItem');\r\n\r\nfunction createAnimationApi(anim) {\r\n\treturn Object.assign({}, AnimationItem(anim));\r\n}\r\n\r\nmodule.exports = {\r\n\tcreateAnimationApi: createAnimationApi\r\n};\r\n\r\n},{\"./animation/AnimationItem\":1}],11:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar keyPathBuilder = require('../helpers/keyPathBuilder');\r\nvar layer_types = require('../enums/layer_types');\r\n\r\nfunction KeyPathList(elements, node_type) {\r\n\r\n\tfunction _getLength() {\r\n\t\treturn elements.length;\r\n\t}\r\n\r\n\tfunction _filterLayerByType(elements, type) {\r\n\t\treturn elements.filter(function (element) {\r\n\t\t\treturn element.getTargetLayer().data.ty === layer_types[type];\r\n\t\t});\r\n\t}\r\n\r\n\tfunction _filterLayerByName(elements, name) {\r\n\t\treturn elements.filter(function (element) {\r\n\t\t\treturn element.getTargetLayer().data.nm === name;\r\n\t\t});\r\n\t}\r\n\r\n\tfunction _filterLayerByProperty(elements, name) {\r\n\t\treturn elements.filter(function (element) {\r\n\t\t\tif (element.hasProperty(name)) {\r\n\t\t\t\treturn element.getProperty(name);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t}\r\n\r\n\tfunction getLayersByType(selector) {\r\n\t\treturn KeyPathList(_filterLayerByType(elements, selector), 'layer');\r\n\t}\r\n\r\n\tfunction getLayersByName(selector) {\r\n\t\treturn KeyPathList(_filterLayerByName(elements, selector), 'layer');\r\n\t}\r\n\r\n\tfunction getPropertiesBySelector(selector) {\r\n\t\treturn KeyPathList(elements.filter(function (element) {\r\n\t\t\treturn element.hasProperty(selector);\r\n\t\t}).map(function (element) {\r\n\t\t\treturn element.getProperty(selector);\r\n\t\t}), 'property');\r\n\t}\r\n\r\n\tfunction getLayerProperty(selector) {\r\n\t\tvar layers = _filterLayerByProperty(elements, selector);\r\n\t\tvar properties = layers.map(function (element) {\r\n\t\t\treturn element.getProperty(selector);\r\n\t\t});\r\n\t\treturn KeyPathList(properties, 'property');\r\n\t}\r\n\r\n\tfunction getKeyPath(propertyPath) {\r\n\t\tvar keyPathData = keyPathBuilder(propertyPath);\r\n\t\tvar selector = keyPathData.selector;\r\n\t\tvar nodesByName, nodesByType, selectedNodes;\r\n\t\tif (node_type === 'renderer' || node_type === 'layer') {\r\n\t\t\tnodesByName = getLayersByName(selector);\r\n\t\t\tnodesByType = getLayersByType(selector);\r\n\t\t\tif (nodesByName.length === 0 && nodesByType.length === 0) {\r\n\t\t\t\tselectedNodes = getLayerProperty(selector);\r\n\t\t\t} else {\r\n\t\t\t\tselectedNodes = nodesByName.concat(nodesByType);\r\n\t\t\t}\r\n\t\t\tif (keyPathData.propertyPath) {\r\n\t\t\t\treturn selectedNodes.getKeyPath(keyPathData.propertyPath);\r\n\t\t\t} else {\r\n\t\t\t\treturn selectedNodes;\r\n\t\t\t}\r\n\t\t} else if (node_type === 'property') {\r\n\t\t\tselectedNodes = getPropertiesBySelector(selector);\r\n\t\t\tif (keyPathData.propertyPath) {\r\n\t\t\t\treturn selectedNodes.getKeyPath(keyPathData.propertyPath);\r\n\t\t\t} else {\r\n\t\t\t\treturn selectedNodes;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction concat(nodes) {\r\n\t\tvar nodesElements = nodes.getElements();\r\n\t\treturn KeyPathList(elements.concat(nodesElements), node_type);\r\n\t}\r\n\r\n\tfunction getElements() {\r\n\t\treturn elements;\r\n\t}\r\n\r\n\tfunction getPropertyAtIndex(index) {\r\n\t\treturn elements[index];\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tgetKeyPath: getKeyPath,\r\n\t\tconcat: concat,\r\n\t\tgetElements: getElements,\r\n\t\tgetPropertyAtIndex: getPropertyAtIndex\r\n\t};\r\n\r\n\tObject.defineProperty(methods, 'length', {\r\n\t\tget: _getLength\r\n\t});\r\n\r\n\treturn methods;\r\n}\r\n\r\nmodule.exports = KeyPathList;\r\n\r\n},{\"../enums/layer_types\":3,\"../helpers/keyPathBuilder\":5}],12:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar key_path_separator = require('../enums/key_path_separator');\r\nvar property_names = require('../enums/property_names');\r\n\r\nfunction KeyPathNode(state) {\r\n\r\n\tfunction getPropertyByPath(selector, propertyPath) {\r\n\t\tvar instanceProperties = state.properties || [];\r\n\t\tvar i = 0,\r\n\t\t len = instanceProperties.length;\r\n\t\twhile (i < len) {\r\n\t\t\tif (instanceProperties[i].name === selector) {\r\n\t\t\t\treturn instanceProperties[i].value;\r\n\t\t\t}\r\n\t\t\ti += 1;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction hasProperty(selector) {\r\n\t\treturn !!getPropertyByPath(selector);\r\n\t}\r\n\r\n\tfunction getProperty(selector) {\r\n\t\treturn getPropertyByPath(selector);\r\n\t}\r\n\r\n\tfunction fromKeypathLayerPoint(point) {\r\n\t\treturn state.parent.fromKeypathLayerPoint(point);\r\n\t}\r\n\r\n\tfunction toKeypathLayerPoint(point) {\r\n\t\treturn state.parent.toKeypathLayerPoint(point);\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\thasProperty: hasProperty,\r\n\t\tgetProperty: getProperty,\r\n\t\tfromKeypathLayerPoint: fromKeypathLayerPoint,\r\n\t\ttoKeypathLayerPoint: toKeypathLayerPoint\r\n\t};\r\n\treturn methods;\r\n}\r\n\r\nmodule.exports = KeyPathNode;\r\n\r\n},{\"../enums/key_path_separator\":2,\"../enums/property_names\":4}],13:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../key_path/KeyPathNode');\r\nvar Transform = require('./transform/Transform');\r\nvar Effects = require('./effects/Effects');\r\nvar Matrix = require('../helpers/transformationMatrix');\r\n\r\nfunction LayerBase(state) {\r\n\r\n\tvar transform = Transform(state.element.finalTransform.mProp, state);\r\n\tvar effects = Effects(state.element.effectsManager.effectElements || [], state);\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\tstate.properties.push({\r\n\t\t\tname: 'transform',\r\n\t\t\tvalue: transform\r\n\t\t}, {\r\n\t\t\tname: 'Transform',\r\n\t\t\tvalue: transform\r\n\t\t}, {\r\n\t\t\tname: 'Effects',\r\n\t\t\tvalue: effects\r\n\t\t}, {\r\n\t\t\tname: 'effects',\r\n\t\t\tvalue: effects\r\n\t\t});\r\n\t}\r\n\r\n\tfunction getElementToPoint(point) {}\r\n\r\n\tfunction toKeypathLayerPoint(point) {\r\n\t\tvar element = state.element;\r\n\t\tif (state.parent.toKeypathLayerPoint) {\r\n\t\t\tpoint = state.parent.toKeypathLayerPoint(point);\r\n\t\t}\r\n\t\tvar toWorldMat = Matrix();\r\n\t\tvar transformMat = state.getProperty('Transform').getTargetTransform();\r\n\t\ttransformMat.applyToMatrix(toWorldMat);\r\n\t\tif (element.hierarchy && element.hierarchy.length) {\r\n\t\t\tvar i,\r\n\t\t\t len = element.hierarchy.length;\r\n\t\t\tfor (i = 0; i < len; i += 1) {\r\n\t\t\t\telement.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn toWorldMat.inversePoint(point);\r\n\t}\r\n\r\n\tfunction fromKeypathLayerPoint(point) {\r\n\t\tvar element = state.element;\r\n\t\tvar toWorldMat = Matrix();\r\n\t\tvar transformMat = state.getProperty('Transform').getTargetTransform();\r\n\t\ttransformMat.applyToMatrix(toWorldMat);\r\n\t\tif (element.hierarchy && element.hierarchy.length) {\r\n\t\t\tvar i,\r\n\t\t\t len = element.hierarchy.length;\r\n\t\t\tfor (i = 0; i < len; i += 1) {\r\n\t\t\t\telement.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoint = toWorldMat.applyToPointArray(point[0], point[1], point[2] || 0);\r\n\t\tif (state.parent.fromKeypathLayerPoint) {\r\n\t\t\treturn state.parent.fromKeypathLayerPoint(point);\r\n\t\t} else {\r\n\t\t\treturn point;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getTargetLayer() {\r\n\t\treturn state.element;\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tgetTargetLayer: getTargetLayer,\r\n\t\ttoKeypathLayerPoint: toKeypathLayerPoint,\r\n\t\tfromKeypathLayerPoint: fromKeypathLayerPoint\r\n\t};\r\n\r\n\t_buildPropertyMap();\r\n\r\n\treturn Object.assign(state, KeyPathNode(state), methods);\r\n}\r\n\r\nmodule.exports = LayerBase;\r\n\r\n},{\"../helpers/transformationMatrix\":8,\"../key_path/KeyPathNode\":12,\"./effects/Effects\":19,\"./transform/Transform\":39}],14:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar layer_types = require('../enums/layer_types');\r\nvar layer_api = require('../helpers/layerAPIBuilder');\r\n\r\nfunction LayerList(elements) {\r\n\r\n\tfunction _getLength() {\r\n\t\treturn elements.length;\r\n\t}\r\n\r\n\tfunction _filterLayerByType(elements, type) {\r\n\t\treturn elements.filter(function (element) {\r\n\t\t\treturn element.data.ty === layer_types[type];\r\n\t\t});\r\n\t}\r\n\r\n\tfunction _filterLayerByName(elements, name) {\r\n\t\treturn elements.filter(function (element) {\r\n\t\t\treturn element.data.nm === name;\r\n\t\t});\r\n\t}\r\n\r\n\tfunction getLayers() {\r\n\t\treturn LayerList(elements);\r\n\t}\r\n\r\n\tfunction getLayersByType(type) {\r\n\t\tvar elementsList = _filterLayerByType(elements, type);\r\n\t\treturn LayerList(elementsList);\r\n\t}\r\n\r\n\tfunction getLayersByName(type) {\r\n\t\tvar elementsList = _filterLayerByName(elements, type);\r\n\t\treturn LayerList(elementsList);\r\n\t}\r\n\r\n\tfunction layer(index) {\r\n\t\tif (index >= elements.length) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn layer_api(elements[parseInt(index)]);\r\n\t}\r\n\r\n\tfunction addIteratableMethods(iteratableMethods, list) {\r\n\t\titeratableMethods.reduce(function (accumulator, value) {\r\n\t\t\tvar _value = value;\r\n\t\t\taccumulator[value] = function () {\r\n\t\t\t\tvar _arguments = arguments;\r\n\t\t\t\treturn elements.map(function (element) {\r\n\t\t\t\t\tvar layer = layer_api(element);\r\n\t\t\t\t\tif (layer[_value]) {\r\n\t\t\t\t\t\treturn layer[_value].apply(null, _arguments);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\treturn accumulator;\r\n\t\t}, methods);\r\n\t}\r\n\r\n\tfunction getTargetElements() {\r\n\t\treturn elements;\r\n\t}\r\n\r\n\tfunction concat(list) {\r\n\t\treturn elements.concat(list.getTargetElements());\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tgetLayers: getLayers,\r\n\t\tgetLayersByType: getLayersByType,\r\n\t\tgetLayersByName: getLayersByName,\r\n\t\tlayer: layer,\r\n\t\tconcat: concat,\r\n\t\tgetTargetElements: getTargetElements\r\n\t};\r\n\r\n\taddIteratableMethods(['setTranslate', 'getType', 'getDuration']);\r\n\taddIteratableMethods(['setText', 'getText', 'setDocumentData', 'canResizeFont', 'setMinimumFontSize']);\r\n\r\n\tObject.defineProperty(methods, 'length', {\r\n\t\tget: _getLength\r\n\t});\r\n\treturn methods;\r\n}\r\n\r\nmodule.exports = LayerList;\r\n\r\n},{\"../enums/layer_types\":3,\"../helpers/layerAPIBuilder\":6}],15:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction Camera(element, parent) {\r\n\r\n\tvar instance = {};\r\n\r\n\tvar state = {\r\n\t\telement: element,\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Point of Interest',\r\n\t\t\tvalue: Property(element.a, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Zoom',\r\n\t\t\tvalue: Property(element.pe, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Position',\r\n\t\t\tvalue: Property(element.p, parent)\r\n\t\t}, {\r\n\t\t\tname: 'X Rotation',\r\n\t\t\tvalue: Property(element.rx, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Y Rotation',\r\n\t\t\tvalue: Property(element.ry, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Z Rotation',\r\n\t\t\tvalue: Property(element.rz, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Orientation',\r\n\t\t\tvalue: Property(element.or, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tfunction getTargetLayer() {\r\n\t\treturn state.element;\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tgetTargetLayer: getTargetLayer\r\n\t};\r\n\r\n\treturn Object.assign(instance, KeyPathNode(state), methods);\r\n}\r\n\r\nmodule.exports = Camera;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],16:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathList = require('../../key_path/KeyPathList');\r\nvar LayerBase = require('../LayerBase');\r\nvar layer_api = require('../../helpers/layerAPIBuilder');\r\nvar Property = require('../../property/Property');\r\nvar TimeRemap = require('./TimeRemap');\r\n\r\nfunction Composition(element, parent) {\r\n\r\n\tvar instance = {};\r\n\r\n\tvar state = {\r\n\t\telement: element,\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction buildLayerApi(layer, index) {\r\n\t\tvar _layerApi = null;\r\n\t\tvar ob = {\r\n\t\t\tname: layer.nm\r\n\t\t};\r\n\r\n\t\tfunction getLayerApi() {\r\n\t\t\tif (!_layerApi) {\r\n\t\t\t\t_layerApi = layer_api(element.elements[index], state);\r\n\t\t\t}\r\n\t\t\treturn _layerApi;\r\n\t\t}\r\n\r\n\t\tObject.defineProperty(ob, 'value', {\r\n\t\t\tget: getLayerApi\r\n\t\t});\r\n\t\treturn ob;\r\n\t}\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\tvar compositionLayers = element.layers.map(buildLayerApi);\r\n\t\treturn [{\r\n\t\t\tname: 'Time Remap',\r\n\t\t\tvalue: TimeRemap(element.tm)\r\n\t\t}].concat(compositionLayers);\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(instance, LayerBase(state), KeyPathList(state.elements, 'layer'), methods);\r\n}\r\n\r\nmodule.exports = Composition;\r\n\r\n},{\"../../helpers/layerAPIBuilder\":6,\"../../key_path/KeyPathList\":11,\"../../property/Property\":40,\"../LayerBase\":13,\"./TimeRemap\":17}],17:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar ValueProperty = require('../../property/ValueProperty');\r\n\r\nfunction TimeRemap(property, parent) {\r\n\tvar state = {\r\n\t\tproperty: property,\r\n\t\tparent: parent\r\n\t};\r\n\r\n\tvar _isCallbackAdded = false;\r\n\tvar currentSegmentInit = 0;\r\n\tvar currentSegmentEnd = 0;\r\n\tvar previousTime = 0,\r\n\t currentTime = 0;\r\n\tvar initTime = 0;\r\n\tvar _loop = true;\r\n\tvar _loopCount = 0;\r\n\tvar _speed = 1;\r\n\tvar _paused = false;\r\n\tvar _isDebugging = false;\r\n\tvar queuedSegments = [];\r\n\tvar _destroyFunction;\r\n\tvar enterFrameCallback = null;\r\n\tvar enterFrameEvent = {\r\n\t\ttime: -1\r\n\t};\r\n\r\n\tfunction playSegment(init, end, clear) {\r\n\t\t_paused = false;\r\n\t\tif (clear) {\r\n\t\t\tclearQueue();\r\n\t\t\tcurrentTime = init;\r\n\t\t}\r\n\t\tif (_isDebugging) {\r\n\t\t\tconsole.log(init, end);\r\n\t\t}\r\n\t\t_loopCount = 0;\r\n\t\tpreviousTime = Date.now();\r\n\t\tcurrentSegmentInit = init;\r\n\t\tcurrentSegmentEnd = end;\r\n\t\taddCallback();\r\n\t}\r\n\r\n\tfunction playQueuedSegment() {\r\n\t\tvar newSegment = queuedSegments.shift();\r\n\t\tplaySegment(newSegment[0], newSegment[1]);\r\n\t}\r\n\r\n\tfunction queueSegment(init, end) {\r\n\t\tqueuedSegments.push([init, end]);\r\n\t}\r\n\r\n\tfunction clearQueue() {\r\n\t\tqueuedSegments.length = 0;\r\n\t}\r\n\r\n\tfunction _segmentPlayer(currentValue) {\r\n\t\tif (currentSegmentInit === currentSegmentEnd) {\r\n\t\t\tcurrentTime = currentSegmentInit;\r\n\t\t} else if (!_paused) {\r\n\t\t\tvar nowTime = Date.now();\r\n\t\t\tvar elapsedTime = _speed * (nowTime - previousTime) / 1000;\r\n\t\t\tpreviousTime = nowTime;\r\n\t\t\tif (currentSegmentInit < currentSegmentEnd) {\r\n\t\t\t\tcurrentTime += elapsedTime;\r\n\t\t\t\tif (currentTime > currentSegmentEnd) {\r\n\t\t\t\t\t_loopCount += 1;\r\n\t\t\t\t\tif (queuedSegments.length) {\r\n\t\t\t\t\t\tplayQueuedSegment();\r\n\t\t\t\t\t} else if (!_loop) {\r\n\t\t\t\t\t\tcurrentTime = currentSegmentEnd;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t/*currentTime -= Math.floor(currentTime / (currentSegmentEnd - currentSegmentInit)) * (currentSegmentEnd - currentSegmentInit);\r\n currentTime = currentSegmentInit + currentTime;*/\r\n\t\t\t\t\t\tcurrentTime = currentTime % (currentSegmentEnd - currentSegmentInit);\r\n\t\t\t\t\t\t//currentTime = currentSegmentInit + (currentTime);\r\n\t\t\t\t\t\t//currentTime = currentSegmentInit + (currentTime - currentSegmentEnd);\r\n\t\t\t\t\t\t//console.log('CT: ', currentTime) \r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcurrentTime -= elapsedTime;\r\n\t\t\t\tif (currentTime < currentSegmentEnd) {\r\n\t\t\t\t\t_loopCount += 1;\r\n\t\t\t\t\tif (queuedSegments.length) {\r\n\t\t\t\t\t\tplayQueuedSegment();\r\n\t\t\t\t\t} else if (!_loop) {\r\n\t\t\t\t\t\tcurrentTime = currentSegmentEnd;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcurrentTime = currentSegmentInit - (currentSegmentEnd - currentTime);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (_isDebugging) {\r\n\t\t\t\tconsole.log(currentTime);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (instance.onEnterFrame && enterFrameEvent.time !== currentTime) {\r\n\t\t\tenterFrameEvent.time = currentTime;\r\n\t\t\tinstance.onEnterFrame(enterFrameEvent);\r\n\t\t}\r\n\t\treturn currentTime;\r\n\t}\r\n\r\n\tfunction addCallback() {\r\n\t\tif (!_isCallbackAdded) {\r\n\t\t\t_isCallbackAdded = true;\r\n\t\t\t_destroyFunction = instance.setValue(_segmentPlayer, _isDebugging);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction playTo(end, clear) {\r\n\t\t_paused = false;\r\n\t\tif (clear) {\r\n\t\t\tclearQueue();\r\n\t\t}\r\n\t\taddCallback();\r\n\t\tcurrentSegmentEnd = end;\r\n\t}\r\n\r\n\tfunction getCurrentTime() {\r\n\t\tif (_isCallbackAdded) {\r\n\t\t\treturn currentTime;\r\n\t\t} else {\r\n\t\t\treturn property.v / property.mult;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setLoop(flag) {\r\n\t\t_loop = flag;\r\n\t}\r\n\r\n\tfunction setSpeed(value) {\r\n\t\t_speed = value;\r\n\t}\r\n\r\n\tfunction setDebugging(flag) {\r\n\t\t_isDebugging = flag;\r\n\t}\r\n\r\n\tfunction pause() {\r\n\t\t_paused = true;\r\n\t}\r\n\r\n\tfunction destroy() {\r\n\t\tif (_destroyFunction) {\r\n\t\t\t_destroyFunction();\r\n\t\t\tstate.property = null;\r\n\t\t\tstate.parent = null;\r\n\t\t}\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tplaySegment: playSegment,\r\n\t\tplayTo: playTo,\r\n\t\tqueueSegment: queueSegment,\r\n\t\tclearQueue: clearQueue,\r\n\t\tsetLoop: setLoop,\r\n\t\tsetSpeed: setSpeed,\r\n\t\tpause: pause,\r\n\t\tsetDebugging: setDebugging,\r\n\t\tgetCurrentTime: getCurrentTime,\r\n\t\tonEnterFrame: null,\r\n\t\tdestroy: destroy\r\n\t};\r\n\r\n\tvar instance = {};\r\n\r\n\treturn Object.assign(instance, methods, ValueProperty(state), KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = TimeRemap;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/ValueProperty\":41}],18:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar Property = require('../../property/Property');\r\n\r\nfunction EffectElement(effect, parent) {\r\n\r\n\treturn Property(effect.p, parent);\r\n}\r\n\r\nmodule.exports = EffectElement;\r\n\r\n},{\"../../property/Property\":40}],19:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\nvar EffectElement = require('./EffectElement');\r\n\r\nfunction Effects(effects, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: buildProperties()\r\n\t};\r\n\r\n\tfunction getValue(effectData, index) {\r\n\t\tvar nm = effectData.data ? effectData.data.nm : index.toString();\r\n\t\tvar effectElement = effectData.data ? Effects(effectData.effectElements, parent) : Property(effectData.p, parent);\r\n\t\treturn {\r\n\t\t\tname: nm,\r\n\t\t\tvalue: effectElement\r\n\t\t};\r\n\t}\r\n\r\n\tfunction buildProperties() {\r\n\t\tvar i,\r\n\t\t len = effects.length;\r\n\t\tvar arr = [];\r\n\t\tfor (i = 0; i < len; i += 1) {\r\n\t\t\tarr.push(getValue(effects[i], i));\r\n\t\t}\r\n\t\treturn arr;\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = Effects;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40,\"./EffectElement\":18}],20:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar LayerBase = require('../LayerBase');\r\n\r\nfunction Image(element) {\r\n\r\n\tvar state = {\r\n\t\telement: element,\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign({}, LayerBase(state), methods);\r\n}\r\n\r\nmodule.exports = Image;\r\n\r\n},{\"../LayerBase\":13}],21:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar LayerBase = require('../LayerBase');\r\n\r\nfunction NullElement(element, parent) {\r\n\r\n\tvar instance = {};\r\n\r\n\tvar state = {\r\n\t\telement: element,\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(instance, LayerBase(state), methods);\r\n}\r\n\r\nmodule.exports = NullElement;\r\n\r\n},{\"../LayerBase\":13}],22:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar LayerBase = require('../LayerBase');\r\nvar ShapeContents = require('./ShapeContents');\r\n\r\nfunction Shape(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tproperties: [],\r\n\t\tparent: parent,\r\n\t\telement: element\r\n\t};\r\n\tvar shapeContents = ShapeContents(element.data.shapes, element.itemsData, state);\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\tstate.properties.push({\r\n\t\t\tname: 'Contents',\r\n\t\t\tvalue: shapeContents\r\n\t\t});\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\t_buildPropertyMap();\r\n\r\n\treturn Object.assign(state, LayerBase(state), methods);\r\n}\r\n\r\nmodule.exports = Shape;\r\n\r\n},{\"../LayerBase\":13,\"./ShapeContents\":23}],23:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\nvar ShapeRectangle = require('./ShapeRectangle');\r\nvar ShapeFill = require('./ShapeFill');\r\nvar ShapeStroke = require('./ShapeStroke');\r\nvar ShapeEllipse = require('./ShapeEllipse');\r\nvar ShapeGradientFill = require('./ShapeGradientFill');\r\nvar ShapeGradientStroke = require('./ShapeGradientStroke');\r\nvar ShapeTrimPaths = require('./ShapeTrimPaths');\r\nvar ShapeRepeater = require('./ShapeRepeater');\r\nvar ShapePolystar = require('./ShapePolystar');\r\nvar ShapeRoundCorners = require('./ShapeRoundCorners');\r\nvar ShapePath = require('./ShapePath');\r\nvar Transform = require('../transform/Transform');\r\nvar Matrix = require('../../helpers/transformationMatrix');\r\n\r\nfunction ShapeContents(shapesData, shapes, parent) {\r\n\tvar state = {\r\n\t\tproperties: _buildPropertyMap(),\r\n\t\tparent: parent\r\n\t};\r\n\r\n\tvar cachedShapeProperties = [];\r\n\r\n\tfunction buildShapeObject(shape, index) {\r\n\t\tvar ob = {\r\n\t\t\tname: shape.nm\r\n\t\t};\r\n\t\tObject.defineProperty(ob, 'value', {\r\n\t\t\tget: function get() {\r\n\t\t\t\tif (cachedShapeProperties[index]) {\r\n\t\t\t\t\treturn cachedShapeProperties[index];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar property;\r\n\t\t\t\t}\r\n\t\t\t\tif (shape.ty === 'gr') {\r\n\t\t\t\t\tproperty = ShapeContents(shapesData[index].it, shapes[index].it, state);\r\n\t\t\t\t} else if (shape.ty === 'rc') {\r\n\t\t\t\t\tproperty = ShapeRectangle(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'el') {\r\n\t\t\t\t\tproperty = ShapeEllipse(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'fl') {\r\n\t\t\t\t\tproperty = ShapeFill(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'st') {\r\n\t\t\t\t\tproperty = ShapeStroke(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'gf') {\r\n\t\t\t\t\tproperty = ShapeGradientFill(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'gs') {\r\n\t\t\t\t\tproperty = ShapeGradientStroke(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'tm') {\r\n\t\t\t\t\tproperty = ShapeTrimPaths(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'rp') {\r\n\t\t\t\t\tproperty = ShapeRepeater(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'sr') {\r\n\t\t\t\t\tproperty = ShapePolystar(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'rd') {\r\n\t\t\t\t\tproperty = ShapeRoundCorners(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'sh') {\r\n\t\t\t\t\tproperty = ShapePath(shapes[index], state);\r\n\t\t\t\t} else if (shape.ty === 'tr') {\r\n\t\t\t\t\tproperty = Transform(shapes[index].transform.mProps, state);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.log(shape.ty);\r\n\t\t\t\t}\r\n\t\t\t\tcachedShapeProperties[index] = property;\r\n\t\t\t\treturn property;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn ob;\r\n\t}\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn shapesData.map(function (shape, index) {\r\n\t\t\treturn buildShapeObject(shape, index);\r\n\t\t});\r\n\t}\r\n\r\n\tfunction fromKeypathLayerPoint(point) {\r\n\t\tif (state.hasProperty('Transform')) {\r\n\t\t\tvar toWorldMat = Matrix();\r\n\t\t\tvar transformMat = state.getProperty('Transform').getTargetTransform();\r\n\t\t\ttransformMat.applyToMatrix(toWorldMat);\r\n\t\t\tpoint = toWorldMat.applyToPointArray(point[0], point[1], point[2] || 0);\r\n\t\t}\r\n\t\treturn state.parent.fromKeypathLayerPoint(point);\r\n\t}\r\n\r\n\tfunction toKeypathLayerPoint(point) {\r\n\t\tpoint = state.parent.toKeypathLayerPoint(point);\r\n\t\tif (state.hasProperty('Transform')) {\r\n\t\t\tvar toWorldMat = Matrix();\r\n\t\t\tvar transformMat = state.getProperty('Transform').getTargetTransform();\r\n\t\t\ttransformMat.applyToMatrix(toWorldMat);\r\n\t\t\tpoint = toWorldMat.inversePoint(point);\r\n\t\t}\r\n\t\treturn point;\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tfromKeypathLayerPoint: fromKeypathLayerPoint,\r\n\t\ttoKeypathLayerPoint: toKeypathLayerPoint\r\n\r\n\t\t//state.properties = _buildPropertyMap();\r\n\r\n\t};return Object.assign(state, KeyPathNode(state), methods);\r\n}\r\n\r\nmodule.exports = ShapeContents;\r\n\r\n},{\"../../helpers/transformationMatrix\":8,\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40,\"../transform/Transform\":39,\"./ShapeEllipse\":24,\"./ShapeFill\":25,\"./ShapeGradientFill\":26,\"./ShapeGradientStroke\":27,\"./ShapePath\":28,\"./ShapePolystar\":29,\"./ShapeRectangle\":30,\"./ShapeRepeater\":31,\"./ShapeRoundCorners\":32,\"./ShapeStroke\":33,\"./ShapeTrimPaths\":34}],24:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapeEllipse(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Size',\r\n\t\t\tvalue: Property(element.sh.s, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Position',\r\n\t\t\tvalue: Property(element.sh.p, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeEllipse;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],25:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapeFill(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Color',\r\n\t\t\tvalue: Property(element.c, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Opacity',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: Property(element.o, parent)\r\n\t\t\t}\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeFill;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],26:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapeGradientFill(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Start Point',\r\n\t\t\tvalue: Property(element.s, parent)\r\n\t\t}, {\r\n\t\t\tname: 'End Point',\r\n\t\t\tvalue: Property(element.s, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Opacity',\r\n\t\t\tvalue: Property(element.o, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Highlight Length',\r\n\t\t\tvalue: Property(element.h, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Highlight Angle',\r\n\t\t\tvalue: Property(element.a, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Colors',\r\n\t\t\tvalue: Property(element.g.prop, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeGradientFill;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],27:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapeGradientStroke(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Start Point',\r\n\t\t\tvalue: Property(element.s, parent)\r\n\t\t}, {\r\n\t\t\tname: 'End Point',\r\n\t\t\tvalue: Property(element.e, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Opacity',\r\n\t\t\tvalue: Property(element.o, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Highlight Length',\r\n\t\t\tvalue: Property(element.h, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Highlight Angle',\r\n\t\t\tvalue: Property(element.a, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Colors',\r\n\t\t\tvalue: Property(element.g.prop, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Stroke Width',\r\n\t\t\tvalue: Property(element.w, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeGradientStroke;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],28:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapePath(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction setPath(value) {\r\n\t\tProperty(element.sh).setValue(value);\r\n\t}\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'path',\r\n\t\t\tvalue: Property(element.sh, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapePath;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],29:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapePolystar(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Points',\r\n\t\t\tvalue: Property(element.sh.pt, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Position',\r\n\t\t\tvalue: Property(element.sh.p, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Rotation',\r\n\t\t\tvalue: Property(element.sh.r, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Inner Radius',\r\n\t\t\tvalue: Property(element.sh.ir, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Outer Radius',\r\n\t\t\tvalue: Property(element.sh.or, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Inner Roundness',\r\n\t\t\tvalue: Property(element.sh.is, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Outer Roundness',\r\n\t\t\tvalue: Property(element.sh.os, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapePolystar;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],30:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapeRectangle(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Size',\r\n\t\t\tvalue: Property(element.sh.s, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Position',\r\n\t\t\tvalue: Property(element.sh.p, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Roundness',\r\n\t\t\tvalue: Property(element.sh.r, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeRectangle;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],31:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\nvar Transform = require('../transform/Transform');\r\n\r\nfunction ShapeRepeater(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Copies',\r\n\t\t\tvalue: Property(element.c, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Offset',\r\n\t\t\tvalue: Property(element.o, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Transform',\r\n\t\t\tvalue: Transform(element.tr, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeRepeater;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40,\"../transform/Transform\":39}],32:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapeRoundCorners(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Radius',\r\n\t\t\tvalue: Property(element.rd, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeRoundCorners;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],33:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapeStroke(element, parent) {\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Color',\r\n\t\t\tvalue: Property(element.c, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Stroke Width',\r\n\t\t\tvalue: Property(element.w, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Opacity',\r\n\t\t\tvalue: Property(element.o, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeStroke;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],34:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction ShapeTrimPaths(element, parent) {\r\n\r\n\tvar state = {\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Start',\r\n\t\t\tvalue: Property(element.s, parent)\r\n\t\t}, {\r\n\t\t\tname: 'End',\r\n\t\t\tvalue: Property(element.e, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Offset',\r\n\t\t\tvalue: Property(element.o, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = ShapeTrimPaths;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],35:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar LayerBase = require('../LayerBase');\r\n\r\nfunction Solid(element, parent) {\r\n\r\n\tvar state = {\r\n\t\telement: element,\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign({}, LayerBase(state), methods);\r\n}\r\n\r\nmodule.exports = Solid;\r\n\r\n},{\"../LayerBase\":13}],36:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\nvar TextAnimator = require('./TextAnimator');\r\n\r\nfunction Text(element, parent) {\r\n\r\n\tvar instance = {};\r\n\r\n\tvar state = {\r\n\t\telement: element,\r\n\t\tparent: parent,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction setDocumentData(_function) {\r\n\t\tvar previousValue;\r\n\t\tvar textDocumentUpdater = function textDocumentUpdater(data) {\r\n\t\t\tvar newValue = _function(element.textProperty.currentData);\r\n\t\t\tif (previousValue !== newValue) {\r\n\t\t\t\tpreviousValue = newValue;\r\n\t\t\t\treturn Object.assign({}, data, newValue, { __complete: false });\r\n\t\t\t}\r\n\t\t\treturn data;\r\n\t\t};\r\n\t\telement.textProperty.addEffect(textDocumentUpdater);\r\n\t}\r\n\r\n\tfunction addAnimators() {\r\n\t\tvar animatorProperties = [];\r\n\t\tvar animators = element.textAnimator._animatorsData;\r\n\t\tvar i,\r\n\t\t len = animators.length;\r\n\t\tvar textAnimator;\r\n\t\tfor (i = 0; i < len; i += 1) {\r\n\t\t\ttextAnimator = TextAnimator(animators[i]);\r\n\t\t\tanimatorProperties.push({\r\n\t\t\t\tname: element.textAnimator._textData.a[i].nm || 'Animator ' + (i + 1), //Fallback for old animations\r\n\t\t\t\tvalue: textAnimator\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn animatorProperties;\r\n\t}\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Source',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setDocumentData\r\n\t\t\t}\r\n\t\t}].concat(addAnimators());\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(instance, methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = Text;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40,\"./TextAnimator\":37}],37:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction TextAnimator(animator) {\r\n\r\n\tvar instance = {};\r\n\r\n\tvar state = {\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction setAnchorPoint(value) {\r\n\t\tProperty(animator.a.a).setValue(value);\r\n\t}\r\n\r\n\tfunction setFillBrightness(value) {\r\n\t\tProperty(animator.a.fb).setValue(value);\r\n\t}\r\n\r\n\tfunction setFillColor(value) {\r\n\t\tProperty(animator.a.fc).setValue(value);\r\n\t}\r\n\r\n\tfunction setFillHue(value) {\r\n\t\tProperty(animator.a.fh).setValue(value);\r\n\t}\r\n\r\n\tfunction setFillSaturation(value) {\r\n\t\tProperty(animator.a.fs).setValue(value);\r\n\t}\r\n\r\n\tfunction setFillOpacity(value) {\r\n\t\tProperty(animator.a.fo).setValue(value);\r\n\t}\r\n\r\n\tfunction setOpacity(value) {\r\n\t\tProperty(animator.a.o).setValue(value);\r\n\t}\r\n\r\n\tfunction setPosition(value) {\r\n\t\tProperty(animator.a.p).setValue(value);\r\n\t}\r\n\r\n\tfunction setRotation(value) {\r\n\t\tProperty(animator.a.r).setValue(value);\r\n\t}\r\n\r\n\tfunction setRotationX(value) {\r\n\t\tProperty(animator.a.rx).setValue(value);\r\n\t}\r\n\r\n\tfunction setRotationY(value) {\r\n\t\tProperty(animator.a.ry).setValue(value);\r\n\t}\r\n\r\n\tfunction setScale(value) {\r\n\t\tProperty(animator.a.s).setValue(value);\r\n\t}\r\n\r\n\tfunction setSkewAxis(value) {\r\n\t\tProperty(animator.a.sa).setValue(value);\r\n\t}\r\n\r\n\tfunction setStrokeColor(value) {\r\n\t\tProperty(animator.a.sc).setValue(value);\r\n\t}\r\n\r\n\tfunction setSkew(value) {\r\n\t\tProperty(animator.a.sk).setValue(value);\r\n\t}\r\n\r\n\tfunction setStrokeOpacity(value) {\r\n\t\tProperty(animator.a.so).setValue(value);\r\n\t}\r\n\r\n\tfunction setStrokeWidth(value) {\r\n\t\tProperty(animator.a.sw).setValue(value);\r\n\t}\r\n\r\n\tfunction setStrokeBrightness(value) {\r\n\t\tProperty(animator.a.sb).setValue(value);\r\n\t}\r\n\r\n\tfunction setStrokeHue(value) {\r\n\t\tProperty(animator.a.sh).setValue(value);\r\n\t}\r\n\r\n\tfunction setStrokeSaturation(value) {\r\n\t\tProperty(animator.a.ss).setValue(value);\r\n\t}\r\n\r\n\tfunction setTrackingAmount(value) {\r\n\t\tProperty(animator.a.t).setValue(value);\r\n\t}\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Anchor Point',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setAnchorPoint\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Fill Brightness',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setFillBrightness\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Fill Color',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setFillColor\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Fill Hue',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setFillHue\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Fill Saturation',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setFillSaturation\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Fill Opacity',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setFillOpacity\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Opacity',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setOpacity\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Position',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setPosition\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Rotation X',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setRotationX\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Rotation Y',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setRotationY\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Scale',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setScale\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Skew Axis',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setSkewAxis\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Stroke Color',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setStrokeColor\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Skew',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setSkew\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Stroke Width',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setStrokeWidth\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Tracking Amount',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setTrackingAmount\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Stroke Opacity',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setStrokeOpacity\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Stroke Brightness',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setStrokeBrightness\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Stroke Saturation',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setStrokeSaturation\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tname: 'Stroke Hue',\r\n\t\t\tvalue: {\r\n\t\t\t\tsetValue: setStrokeHue\r\n\t\t\t}\r\n\t\t}];\r\n\t}\r\n\r\n\tvar methods = {};\r\n\r\n\treturn Object.assign(instance, methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = TextAnimator;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],38:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar LayerBase = require('../LayerBase');\r\nvar Text = require('./Text');\r\n\r\nfunction TextElement(element) {\r\n\r\n\tvar instance = {};\r\n\r\n\tvar TextProperty = Text(element);\r\n\tvar state = {\r\n\t\telement: element,\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'text',\r\n\t\t\tvalue: TextProperty\r\n\t\t}, {\r\n\t\t\tname: 'Text',\r\n\t\t\tvalue: TextProperty\r\n\t\t}];\r\n\t}\r\n\r\n\tfunction getText() {\r\n\t\treturn element.textProperty.currentData.t;\r\n\t}\r\n\r\n\tfunction setText(value, index) {\r\n\t\tsetDocumentData({ t: value }, index);\r\n\t}\r\n\r\n\tfunction setDocumentData(data, index) {\r\n\t\treturn element.updateDocumentData(data, index);\r\n\t}\r\n\r\n\tfunction canResizeFont(_canResize) {\r\n\t\treturn element.canResizeFont(_canResize);\r\n\t}\r\n\r\n\tfunction setMinimumFontSize(_fontSize) {\r\n\t\treturn element.setMinimumFontSize(_fontSize);\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tgetText: getText,\r\n\t\tsetText: setText,\r\n\t\tcanResizeFont: canResizeFont,\r\n\t\tsetDocumentData: setDocumentData,\r\n\t\tsetMinimumFontSize: setMinimumFontSize\r\n\t};\r\n\r\n\treturn Object.assign(instance, LayerBase(state), methods);\r\n}\r\n\r\nmodule.exports = TextElement;\r\n\r\n},{\"../LayerBase\":13,\"./Text\":36}],39:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../../key_path/KeyPathNode');\r\nvar Property = require('../../property/Property');\r\n\r\nfunction Transform(props, parent) {\r\n\tvar state = {\r\n\t\tproperties: _buildPropertyMap()\r\n\t};\r\n\r\n\tfunction _buildPropertyMap() {\r\n\t\treturn [{\r\n\t\t\tname: 'Anchor Point',\r\n\t\t\tvalue: Property(props.a, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Point of Interest',\r\n\t\t\tvalue: Property(props.a, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Position',\r\n\t\t\tvalue: Property(props.p, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Scale',\r\n\t\t\tvalue: Property(props.s, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Rotation',\r\n\t\t\tvalue: Property(props.r, parent)\r\n\t\t}, {\r\n\t\t\tname: 'X Position',\r\n\t\t\tvalue: Property(props.px, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Y Position',\r\n\t\t\tvalue: Property(props.py, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Z Position',\r\n\t\t\tvalue: Property(props.pz, parent)\r\n\t\t}, {\r\n\t\t\tname: 'X Rotation',\r\n\t\t\tvalue: Property(props.rx, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Y Rotation',\r\n\t\t\tvalue: Property(props.ry, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Z Rotation',\r\n\t\t\tvalue: Property(props.rz, parent)\r\n\t\t}, {\r\n\t\t\tname: 'Opacity',\r\n\t\t\tvalue: Property(props.o, parent)\r\n\t\t}];\r\n\t}\r\n\r\n\tfunction getTargetTransform() {\r\n\t\treturn props;\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tgetTargetTransform: getTargetTransform\r\n\t};\r\n\r\n\treturn Object.assign(methods, KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = Transform;\r\n\r\n},{\"../../key_path/KeyPathNode\":12,\"../../property/Property\":40}],40:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar KeyPathNode = require('../key_path/KeyPathNode');\r\nvar ValueProperty = require('./ValueProperty');\r\n\r\nfunction Property(property, parent) {\r\n\tvar state = {\r\n\t\tproperty: property,\r\n\t\tparent: parent\r\n\t};\r\n\r\n\tfunction destroy() {\r\n\t\tstate.property = null;\r\n\t\tstate.parent = null;\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tdestroy: destroy\r\n\t};\r\n\r\n\treturn Object.assign({}, methods, ValueProperty(state), KeyPathNode(state));\r\n}\r\n\r\nmodule.exports = Property;\r\n\r\n},{\"../key_path/KeyPathNode\":12,\"./ValueProperty\":41}],41:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\r\n\r\nfunction ValueProperty(state) {\r\n\r\n\tfunction setValue(value) {\r\n\t\tvar property = state.property;\r\n\t\tif (!property || !property.addEffect) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (typeof value === 'function') {\r\n\t\t\treturn property.addEffect(value);\r\n\t\t} else if (property.propType === 'multidimensional' && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.length === 2) {\r\n\t\t\treturn property.addEffect(function () {\r\n\t\t\t\treturn value;\r\n\t\t\t});\r\n\t\t} else if (property.propType === 'unidimensional' && typeof value === 'number') {\r\n\t\t\treturn property.addEffect(function () {\r\n\t\t\t\treturn value;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getValue() {\r\n\t\treturn state.property.v;\r\n\t}\r\n\r\n\tvar methods = {\r\n\t\tsetValue: setValue,\r\n\t\tgetValue: getValue\r\n\t};\r\n\r\n\treturn methods;\r\n}\r\n\r\nmodule.exports = ValueProperty;\r\n\r\n},{}],42:[function(require,module,exports){\r\n'use strict';\r\n\r\nvar LayerList = require('../layer/LayerList');\r\nvar KeyPathList = require('../key_path/KeyPathList');\r\n\r\nfunction Renderer(state) {\r\n\r\n\tstate._type = 'renderer';\r\n\r\n\tfunction getRendererType() {\r\n\t\treturn state.animation.animType;\r\n\t}\r\n\r\n\treturn Object.assign({\r\n\t\tgetRendererType: getRendererType\r\n\t}, LayerList(state.elements), KeyPathList(state.elements, 'renderer'));\r\n}\r\n\r\nmodule.exports = Renderer;\r\n\r\n},{\"../key_path/KeyPathList\":11,\"../layer/LayerList\":14}]},{},[10])(10)\r\n});\r\n\r\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvYW5pbWF0aW9uL0FuaW1hdGlvbkl0ZW0uanMiLCJzcmMvZW51bXMva2V5X3BhdGhfc2VwYXJhdG9yLmpzIiwic3JjL2VudW1zL2xheWVyX3R5cGVzLmpzIiwic3JjL2VudW1zL3Byb3BlcnR5X25hbWVzLmpzIiwic3JjL2hlbHBlcnMva2V5UGF0aEJ1aWxkZXIuanMiLCJzcmMvaGVscGVycy9sYXllckFQSUJ1aWxkZXIuanMiLCJzcmMvaGVscGVycy9zdHJpbmdTYW5pdGl6ZXIuanMiLCJzcmMvaGVscGVycy90cmFuc2Zvcm1hdGlvbk1hdHJpeC5qcyIsInNyYy9oZWxwZXJzL3R5cGVkQXJyYXlzLmpzIiwic3JjL2luZGV4LmpzIiwic3JjL2tleV9wYXRoL0tleVBhdGhMaXN0LmpzIiwic3JjL2tleV9wYXRoL0tleVBhdGhOb2RlLmpzIiwic3JjL2xheWVyL0xheWVyQmFzZS5qcyIsInNyYy9sYXllci9MYXllckxpc3QuanMiLCJzcmMvbGF5ZXIvY2FtZXJhL0NhbWVyYS5qcyIsInNyYy9sYXllci9jb21wb3NpdGlvbi9Db21wb3NpdGlvbi5qcyIsInNyYy9sYXllci9jb21wb3NpdGlvbi9UaW1lUmVtYXAuanMiLCJzcmMvbGF5ZXIvZWZmZWN0cy9FZmZlY3RFbGVtZW50LmpzIiwic3JjL2xheWVyL2VmZmVjdHMvRWZmZWN0cy5qcyIsInNyYy9sYXllci9pbWFnZS9JbWFnZUVsZW1lbnQuanMiLCJzcmMvbGF5ZXIvbnVsbF9lbGVtZW50L051bGxFbGVtZW50LmpzIiwic3JjL2xheWVyL3NoYXBlL1NoYXBlLmpzIiwic3JjL2xheWVyL3NoYXBlL1NoYXBlQ29udGVudHMuanMiLCJzcmMvbGF5ZXIvc2hhcGUvU2hhcGVFbGxpcHNlLmpzIiwic3JjL2xheWVyL3NoYXBlL1NoYXBlRmlsbC5qcyIsInNyYy9sYXllci9zaGFwZS9TaGFwZUdyYWRpZW50RmlsbC5qcyIsInNyYy9sYXllci9zaGFwZS9TaGFwZUdyYWRpZW50U3Ryb2tlLmpzIiwic3JjL2xheWVyL3NoYXBlL1NoYXBlUGF0aC5qcyIsInNyYy9sYXllci9zaGFwZS9TaGFwZVBvbHlzdGFyLmpzIiwic3JjL2xheWVyL3NoYXBlL1NoYXBlUmVjdGFuZ2xlLmpzIiwic3JjL2xheWVyL3NoYXBlL1NoYXBlUmVwZWF0ZXIuanMiLCJzcmMvbGF5ZXIvc2hhcGUvU2hhcGVSb3VuZENvcm5lcnMuanMiLCJzcmMvbGF5ZXIvc2hhcGUvU2hhcGVTdHJva2UuanMiLCJzcmMvbGF5ZXIvc2hhcGUvU2hhcGVUcmltUGF0aHMuanMiLCJzcmMvbGF5ZXIvc29saWQvU29saWRFbGVtZW50LmpzIiwic3JjL2xheWVyL3RleHQvVGV4dC5qcyIsInNyYy9sYXllci90ZXh0L1RleHRBbmltYXRvci5qcyIsInNyYy9sYXllci90ZXh0L1RleHRFbGVtZW50LmpzIiwic3JjL2xheWVyL3RyYW5zZm9ybS9UcmFuc2Zvcm0uanMiLCJzcmMvcHJvcGVydHkvUHJvcGVydHkuanMiLCJzcmMvcHJvcGVydHkvVmFsdWVQcm9wZXJ0eS5qcyIsInNyYy9yZW5kZXJlci9SZW5kZXJlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0FDQUEsSUFBSSxXQUFXLFFBQVEsc0JBQVIsQ0FBZjtBQUNBLElBQUksWUFBWSxRQUFRLDRCQUFSLENBQWhCOztBQUVBLFNBQVMsb0JBQVQsQ0FBOEIsU0FBOUIsRUFBeUM7O0FBRXhDLEtBQUksUUFBUTtBQUNYLGFBQVcsU0FEQTtBQUVYLFlBQVUsVUFBVSxRQUFWLENBQW1CLFFBQW5CLENBQTRCLEdBQTVCLENBQWdDLFVBQUMsSUFBRDtBQUFBLFVBQVUsVUFBVSxJQUFWLEVBQWdCLFNBQWhCLENBQVY7QUFBQSxHQUFoQyxDQUZDO0FBR1gsZ0JBQWMsSUFISDtBQUlYLGFBQVc7QUFKQSxFQUFaOztBQU9BLFVBQVMsZUFBVCxHQUEyQjtBQUMxQixTQUFPLFVBQVUsWUFBakI7QUFDQTs7QUFFRCxVQUFTLGNBQVQsR0FB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Iiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsInZhciBSZW5kZXJlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVyL1JlbmRlcmVyJyk7XHJcbnZhciBsYXllcl9hcGkgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2xheWVyQVBJQnVpbGRlcicpO1xyXG5cclxuZnVuY3Rpb24gQW5pbWF0aW9uSXRlbUZhY3RvcnkoYW5pbWF0aW9uKSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdGFuaW1hdGlvbjogYW5pbWF0aW9uLFxyXG5cdFx0ZWxlbWVudHM6IGFuaW1hdGlvbi5yZW5kZXJlci5lbGVtZW50cy5tYXAoKGl0ZW0pID0+IGxheWVyX2FwaShpdGVtLCBhbmltYXRpb24pKSxcclxuXHRcdGJvdW5kaW5nUmVjdDogbnVsbCxcclxuXHRcdHNjYWxlRGF0YTogbnVsbFxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0Q3VycmVudEZyYW1lKCkge1xyXG5cdFx0cmV0dXJuIGFuaW1hdGlvbi5jdXJyZW50RnJhbWU7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRDdXJyZW50VGltZSgpIHtcclxuXHRcdHJldHVybiBhbmltYXRpb24uY3VycmVudEZyYW1lIC8gYW5pbWF0aW9uLmZyYW1lUmF0ZTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGFkZFZhbHVlQ2FsbGJhY2socHJvcGVydGllcywgdmFsdWUpIHtcclxuXHRcdHZhciBpLCBsZW4gPSBwcm9wZXJ0aWVzLmxlbmd0aDtcclxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xyXG5cdFx0XHRwcm9wZXJ0aWVzLmdldFByb3BlcnR5QXRJbmRleChpKS5zZXRWYWx1ZSh2YWx1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB0b0tleXBhdGhMYXllclBvaW50KHByb3BlcnRpZXMsIHBvaW50KSB7XHJcblx0XHR2YXIgaSwgbGVuID0gcHJvcGVydGllcy5sZW5ndGg7XHJcblx0XHR2YXIgcG9pbnRzID0gW107XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcclxuXHRcdFx0cG9pbnRzLnB1c2gocHJvcGVydGllcy5nZXRQcm9wZXJ0eUF0SW5kZXgoaSkudG9LZXlwYXRoTGF5ZXJQb2ludChwb2ludCkpO1xyXG5cdFx0fVxyXG5cdFx0aWYocG9pbnRzLmxlbmd0aCA9PT0gMSkge1xyXG5cdFx0XHRyZXR1cm4gcG9pbnRzWzBdO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBvaW50cztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGZyb21LZXlwYXRoTGF5ZXJQb2ludChwcm9wZXJ0aWVzLCBwb2ludCkge1xyXG5cdFx0dmFyIGksIGxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xyXG5cdFx0dmFyIHBvaW50cyA9IFtdO1xyXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XHJcblx0XHRcdHBvaW50cy5wdXNoKHByb3BlcnRpZXMuZ2V0UHJvcGVydHlBdEluZGV4KGkpLmZyb21LZXlwYXRoTGF5ZXJQb2ludChwb2ludCkpO1xyXG5cdFx0fVxyXG5cdFx0aWYocG9pbnRzLmxlbmd0aCA9PT0gMSkge1xyXG5cdFx0XHRyZXR1cm4gcG9pbnRzWzBdO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBvaW50cztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNhbGN1bGF0ZVNjYWxlRGF0YShib3VuZGluZ1JlY3QpIHtcclxuXHRcdHZhciBjb21wV2lkdGggPSBhbmltYXRpb24uYW5pbWF0aW9uRGF0YS53O1xyXG4gICAgICAgIHZhciBjb21wSGVpZ2h0ID0gYW5pbWF0aW9uLmFuaW1hdGlvbkRhdGEuaDtcclxuXHRcdHZhciBjb21wUmVsID0gY29tcFdpZHRoIC8gY29tcEhlaWdodDtcclxuICAgICAgICB2YXIgZWxlbWVudFdpZHRoID0gYm91bmRpbmdSZWN0LndpZHRoO1xyXG4gICAgICAgIHZhciBlbGVtZW50SGVpZ2h0ID0gYm91bmRpbmdSZWN0LmhlaWdodDtcclxuICAgICAgICB2YXIgZWxlbWVudFJlbCA9IGVsZW1lbnRXaWR0aCAvIGVsZW1lbnRIZWlnaHQ7XHJcbiAgICAgICAgdmFyIHNjYWxlLHNjYWxlWE9mZnNldCxzY2FsZVlPZmZzZXQ7XHJcbiAgICAgICAgdmFyIHhBbGlnbm1lbnQsIHlBbGlnbm1lbnQsIHNjYWxlTW9kZTtcclxuICAgICAgICB2YXIgYXNwZWN0UmF0aW8gPSBhbmltYXRpb24ucmVuZGVyZXIucmVuZGVyQ29uZmlnLnByZXNlcnZlQXNwZWN0UmF0aW8uc3BsaXQoJyAnKTtcclxuICAgICAgICBpZihhc3BlY3RSYXRpb1sxXSA9PT0gJ21lZXQnKSB7XHJcbiAgICAgICAgXHRzY2FsZSA9IGVsZW1lbnRSZWwgPiBjb21wUmVsID8gZWxlbWVudEhlaWdodCAvIGNvbXBIZWlnaHQgOiBlbGVtZW50V2lkdGggLyBjb21wV2lkdGg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHNjYWxlID0gZWxlbWVudFJlbCA+IGNvbXBSZWwgPyBlbGVtZW50V2lkdGggLyBjb21wV2lkdGggOiBlbGVtZW50SGVpZ2h0IC8gY29tcEhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgeEFsaWdubWVudCA9IGFzcGVjdFJhdGlvWzBdLnN1YnN0cigwLDQpO1xyXG4gICAgICAgIHlBbGlnbm1lbnQgPSBhc3BlY3RSYXRpb1swXS5zdWJzdHIoNCk7XHJcbiAgICAgICAgaWYoeEFsaWdubWVudCA9PT0gJ3hNaW4nKSB7XHJcbiAgICAgICAgXHRzY2FsZVhPZmZzZXQgPSAwO1xyXG4gICAgICAgIH0gZWxzZSBpZih4QWxpZ25tZW50ID09PSAneE1pZCcpIHtcclxuICAgICAgICBcdHNjYWxlWE9mZnNldCA9IChlbGVtZW50V2lkdGggLSBjb21wV2lkdGggKiBzY2FsZSkgLyAyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHRzY2FsZVhPZmZzZXQgPSAoZWxlbWVudFdpZHRoIC0gY29tcFdpZHRoICogc2NhbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoeUFsaWdubWVudCA9PT0gJ1lNaW4nKSB7XHJcblx0ICAgICAgICBzY2FsZVlPZmZzZXQgPSAwO1xyXG4gICAgICAgIH0gZWxzZSBpZih5QWxpZ25tZW50ID09PSAnWU1pZCcpIHtcclxuXHQgICAgICAgIHNjYWxlWU9mZnNldCA9IChlbGVtZW50SGVpZ2h0IC0gY29tcEhlaWdodCAqIHNjYWxlKSAvIDI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHQgICAgICAgIHNjYWxlWU9mZnNldCA9IChlbGVtZW50SGVpZ2h0IC0gY29tcEhlaWdodCAqIHNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICBcdHNjYWxlWU9mZnNldDogc2NhbGVZT2Zmc2V0LFxyXG4gICAgICAgIFx0c2NhbGVYT2Zmc2V0OiBzY2FsZVhPZmZzZXQsXHJcbiAgICAgICAgXHRzY2FsZTogc2NhbGVcclxuICAgICAgICB9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZWNhbGN1bGF0ZVNpemUoY29udGFpbmVyKSB7XHJcblx0XHR2YXIgY29udGFpbmVyID0gYW5pbWF0aW9uLndyYXBwZXI7XHJcblx0XHRzdGF0ZS5ib3VuZGluZ1JlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRzdGF0ZS5zY2FsZURhdGEgPSBjYWxjdWxhdGVTY2FsZURhdGEoc3RhdGUuYm91bmRpbmdSZWN0KTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHRvQ29udGFpbmVyUG9pbnQocG9pbnQpIHtcclxuXHRcdGlmKCFhbmltYXRpb24ud3JhcHBlciB8fCAhYW5pbWF0aW9uLndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7XHJcblx0XHRcdHJldHVybiBwb2ludDtcclxuXHRcdH1cclxuXHRcdGlmKCFzdGF0ZS5ib3VuZGluZ1JlY3QpIHtcclxuXHRcdFx0cmVjYWxjdWxhdGVTaXplKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGJvdW5kaW5nUmVjdCA9IHN0YXRlLmJvdW5kaW5nUmVjdDtcclxuXHRcdHZhciBuZXdQb2ludCA9IFtwb2ludFswXSAtIGJvdW5kaW5nUmVjdC5sZWZ0LCBwb2ludFsxXSAtIGJvdW5kaW5nUmVjdC50b3BdO1xyXG5cdFx0dmFyIHNjYWxlRGF0YSA9IHN0YXRlLnNjYWxlRGF0YTtcclxuXHJcbiAgICAgICAgbmV3UG9pbnRbMF0gPSAobmV3UG9pbnRbMF0gLSBzY2FsZURhdGEuc2NhbGVYT2Zmc2V0KSAvIHNjYWxlRGF0YS5zY2FsZTtcclxuICAgICAgICBuZXdQb2ludFsxXSA9IChuZXdQb2ludFsxXSAtIHNjYWxlRGF0YS5zY2FsZVlPZmZzZXQpIC8gc2NhbGVEYXRhLnNjYWxlO1xyXG5cclxuXHRcdHJldHVybiBuZXdQb2ludDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGZyb21Db250YWluZXJQb2ludChwb2ludCkge1xyXG5cdFx0aWYoIWFuaW1hdGlvbi53cmFwcGVyIHx8ICFhbmltYXRpb24ud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHtcclxuXHRcdFx0cmV0dXJuIHBvaW50O1xyXG5cdFx0fVxyXG5cdFx0aWYoIXN0YXRlLmJvdW5kaW5nUmVjdCkge1xyXG5cdFx0XHRyZWNhbGN1bGF0ZVNpemUoKTtcclxuXHRcdH1cclxuXHRcdHZhciBib3VuZGluZ1JlY3QgPSBzdGF0ZS5ib3VuZGluZ1JlY3Q7XHJcblx0XHR2YXIgc2NhbGVEYXRhID0gc3RhdGUuc2NhbGVEYXRhO1xyXG5cclxuXHRcdHZhciBuZXdQb2ludCA9IFtwb2ludFswXSAqIHNjYWxlRGF0YS5zY2FsZSArIHNjYWxlRGF0YS5zY2FsZVhPZmZzZXQsIHBvaW50WzFdICogc2NhbGVEYXRhLnNjYWxlICsgc2NhbGVEYXRhLnNjYWxlWU9mZnNldF07XHJcblxyXG5cdFx0dmFyIG5ld1BvaW50ID0gW25ld1BvaW50WzBdICsgYm91bmRpbmdSZWN0LmxlZnQsIG5ld1BvaW50WzFdICsgYm91bmRpbmdSZWN0LnRvcF07XHJcblx0XHRyZXR1cm4gbmV3UG9pbnQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRTY2FsZURhdGEoKSB7XHJcblx0XHRyZXR1cm4gc3RhdGUuc2NhbGVEYXRhO1xyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0XHRyZWNhbGN1bGF0ZVNpemU6IHJlY2FsY3VsYXRlU2l6ZSxcclxuXHRcdGdldFNjYWxlRGF0YTogZ2V0U2NhbGVEYXRhLFxyXG5cdFx0dG9Db250YWluZXJQb2ludDogdG9Db250YWluZXJQb2ludCxcclxuXHRcdGZyb21Db250YWluZXJQb2ludDogZnJvbUNvbnRhaW5lclBvaW50LFxyXG5cdFx0Z2V0Q3VycmVudEZyYW1lOiBnZXRDdXJyZW50RnJhbWUsXHJcblx0XHRnZXRDdXJyZW50VGltZTogZ2V0Q3VycmVudFRpbWUsXHJcblx0XHRhZGRWYWx1ZUNhbGxiYWNrOiBhZGRWYWx1ZUNhbGxiYWNrLFxyXG5cdFx0dG9LZXlwYXRoTGF5ZXJQb2ludDogdG9LZXlwYXRoTGF5ZXJQb2ludCxcclxuXHRcdGZyb21LZXlwYXRoTGF5ZXJQb2ludDogZnJvbUtleXBhdGhMYXllclBvaW50XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgUmVuZGVyZXIoc3RhdGUpLCBtZXRob2RzKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBbmltYXRpb25JdGVtRmFjdG9yeTsiLCJtb2R1bGUuZXhwb3J0cyA9ICcsJzsiLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuXHQgMDogMCxcclxuXHQgMTogMSxcclxuXHQgMjogMixcclxuXHQgMzogMyxcclxuXHQgNDogNCxcclxuXHQgNTogNSxcclxuXHQgMTM6IDEzLFxyXG5cdCdjb21wJzogMCxcclxuXHQnY29tcG9zaXRpb24nOiAwLFxyXG5cdCdzb2xpZCc6IDEsXHJcblx0J2ltYWdlJzogMixcclxuXHQnbnVsbCc6IDMsXHJcblx0J3NoYXBlJzogNCxcclxuXHQndGV4dCc6IDUsXHJcblx0J2NhbWVyYSc6IDEzXHJcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRMQVlFUl9UUkFOU0ZPUk06ICd0cmFuc2Zvcm0nXHJcbn0iLCJ2YXIga2V5X3BhdGhfc2VwYXJhdG9yID0gcmVxdWlyZSgnLi4vZW51bXMva2V5X3BhdGhfc2VwYXJhdG9yJyk7XHJcbnZhciBzYW5pdGl6ZVN0cmluZyA9IHJlcXVpcmUoJy4vc3RyaW5nU2FuaXRpemVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHByb3BlcnR5UGF0aCkge1xyXG5cdHZhciBrZXlQYXRoU3BsaXQgPSBwcm9wZXJ0eVBhdGguc3BsaXQoa2V5X3BhdGhfc2VwYXJhdG9yKTtcclxuXHR2YXIgc2VsZWN0b3IgPSBrZXlQYXRoU3BsaXQuc2hpZnQoKTtcclxuXHRyZXR1cm4ge1xyXG5cdFx0c2VsZWN0b3I6IHNhbml0aXplU3RyaW5nKHNlbGVjdG9yKSxcclxuXHRcdHByb3BlcnR5UGF0aDoga2V5UGF0aFNwbGl0LmpvaW4oa2V5X3BhdGhfc2VwYXJhdG9yKVxyXG5cdH1cclxufSIsInZhciBUZXh0RWxlbWVudCA9IHJlcXVpcmUoJy4uL2xheWVyL3RleHQvVGV4dEVsZW1lbnQnKTtcclxudmFyIFNoYXBlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2xheWVyL3NoYXBlL1NoYXBlJyk7XHJcbnZhciBOdWxsRWxlbWVudCA9IHJlcXVpcmUoJy4uL2xheWVyL251bGxfZWxlbWVudC9OdWxsRWxlbWVudCcpO1xyXG52YXIgU29saWRFbGVtZW50ID0gcmVxdWlyZSgnLi4vbGF5ZXIvc29saWQvU29saWRFbGVtZW50Jyk7XHJcbnZhciBJbWFnZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9sYXllci9pbWFnZS9JbWFnZUVsZW1lbnQnKTtcclxudmFyIENhbWVyYUVsZW1lbnQgPSByZXF1aXJlKCcuLi9sYXllci9jYW1lcmEvQ2FtZXJhJyk7XHJcbnZhciBMYXllckJhc2UgPSByZXF1aXJlKCcuLi9sYXllci9MYXllckJhc2UnKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldExheWVyQXBpKGVsZW1lbnQsIHBhcmVudCkge1xyXG5cdHZhciBsYXllclR5cGUgPSBlbGVtZW50LmRhdGEudHk7XHJcblx0dmFyIENvbXBvc2l0aW9uID0gcmVxdWlyZSgnLi4vbGF5ZXIvY29tcG9zaXRpb24vQ29tcG9zaXRpb24nKTtcclxuXHRzd2l0Y2gobGF5ZXJUeXBlKSB7XHJcblx0XHRjYXNlIDA6XHJcblx0XHRyZXR1cm4gQ29tcG9zaXRpb24oZWxlbWVudCwgcGFyZW50KTtcclxuXHRcdGNhc2UgMTpcclxuXHRcdHJldHVybiBTb2xpZEVsZW1lbnQoZWxlbWVudCwgcGFyZW50KTtcclxuXHRcdGNhc2UgMjpcclxuXHRcdHJldHVybiBJbWFnZUVsZW1lbnQoZWxlbWVudCwgcGFyZW50KTtcclxuXHRcdGNhc2UgMzpcclxuXHRcdHJldHVybiBOdWxsRWxlbWVudChlbGVtZW50LCBwYXJlbnQpO1xyXG5cdFx0Y2FzZSA0OlxyXG5cdFx0cmV0dXJuIFNoYXBlRWxlbWVudChlbGVtZW50LCBwYXJlbnQsIGVsZW1lbnQuZGF0YS5zaGFwZXMsIGVsZW1lbnQuaXRlbXNEYXRhKTtcclxuXHRcdGNhc2UgNTpcclxuXHRcdHJldHVybiBUZXh0RWxlbWVudChlbGVtZW50LCBwYXJlbnQpO1xyXG5cdFx0Y2FzZSAxMzpcclxuXHRcdHJldHVybiBDYW1lcmFFbGVtZW50KGVsZW1lbnQsIHBhcmVudCk7XHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0cmV0dXJuIExheWVyQmFzZShlbGVtZW50LCBwYXJlbnQpO1xyXG5cdH1cclxufSIsImZ1bmN0aW9uIHNhbml0aXplU3RyaW5nKHN0cmluZykge1xyXG5cdHJldHVybiBzdHJpbmcudHJpbSgpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHNhbml0aXplU3RyaW5nIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL3R5cGVkQXJyYXlzJylcclxuXHJcbi8qIVxyXG4gVHJhbnNmb3JtYXRpb24gTWF0cml4IHYyLjBcclxuIChjKSBFcGlzdGVtZXggMjAxNC0yMDE1XHJcbiB3d3cuZXBpc3RlbWV4LmNvbVxyXG4gQnkgS2VuIEZ5cnN0ZW5iZXJnXHJcbiBDb250cmlidXRpb25zIGJ5IGxlZW9uaXlhLlxyXG4gTGljZW5zZTogTUlULCBoZWFkZXIgcmVxdWlyZWQuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIDJEIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvYmplY3QgaW5pdGlhbGl6ZWQgd2l0aCBpZGVudGl0eSBtYXRyaXguXHJcbiAqXHJcbiAqIFRoZSBtYXRyaXggY2FuIHN5bmNocm9uaXplIGEgY2FudmFzIGNvbnRleHQgYnkgc3VwcGx5aW5nIHRoZSBjb250ZXh0XHJcbiAqIGFzIGFuIGFyZ3VtZW50LCBvciBsYXRlciBhcHBseSBjdXJyZW50IGFic29sdXRlIHRyYW5zZm9ybSB0byBhblxyXG4gKiBleGlzdGluZyBjb250ZXh0LlxyXG4gKlxyXG4gKiBBbGwgdmFsdWVzIGFyZSBoYW5kbGVkIGFzIGZsb2F0aW5nIHBvaW50IHZhbHVlcy5cclxuICpcclxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IFtjb250ZXh0XSAtIE9wdGlvbmFsIGNvbnRleHQgdG8gc3luYyB3aXRoIE1hdHJpeFxyXG4gKiBAcHJvcCB7bnVtYmVyfSBhIC0gc2NhbGUgeFxyXG4gKiBAcHJvcCB7bnVtYmVyfSBiIC0gc2hlYXIgeVxyXG4gKiBAcHJvcCB7bnVtYmVyfSBjIC0gc2hlYXIgeFxyXG4gKiBAcHJvcCB7bnVtYmVyfSBkIC0gc2NhbGUgeVxyXG4gKiBAcHJvcCB7bnVtYmVyfSBlIC0gdHJhbnNsYXRlIHhcclxuICogQHByb3Age251bWJlcn0gZiAtIHRyYW5zbGF0ZSB5XHJcbiAqIEBwcm9wIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8bnVsbH0gW2NvbnRleHQ9bnVsbF0gLSBzZXQgb3IgZ2V0IGN1cnJlbnQgY2FudmFzIGNvbnRleHRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5cclxudmFyIE1hdHJpeCA9IChmdW5jdGlvbigpe1xyXG5cclxuICAgIHZhciBfY29zID0gTWF0aC5jb3M7XHJcbiAgICB2YXIgX3NpbiA9IE1hdGguc2luO1xyXG4gICAgdmFyIF90YW4gPSBNYXRoLnRhbjtcclxuICAgIHZhciBfcm5kID0gTWF0aC5yb3VuZDtcclxuXHJcbiAgICBmdW5jdGlvbiByZXNldCgpe1xyXG4gICAgICAgIHRoaXMucHJvcHNbMF0gPSAxO1xyXG4gICAgICAgIHRoaXMucHJvcHNbMV0gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbMl0gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbM10gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbNF0gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbNV0gPSAxO1xyXG4gICAgICAgIHRoaXMucHJvcHNbNl0gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbN10gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbOF0gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbOV0gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbMTBdID0gMTtcclxuICAgICAgICB0aGlzLnByb3BzWzExXSA9IDA7XHJcbiAgICAgICAgdGhpcy5wcm9wc1sxMl0gPSAwO1xyXG4gICAgICAgIHRoaXMucHJvcHNbMTNdID0gMDtcclxuICAgICAgICB0aGlzLnByb3BzWzE0XSA9IDA7XHJcbiAgICAgICAgdGhpcy5wcm9wc1sxNV0gPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJvdGF0ZShhbmdsZSkge1xyXG4gICAgICAgIGlmKGFuZ2xlID09PSAwKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtQ29zID0gX2NvcyhhbmdsZSk7XHJcbiAgICAgICAgdmFyIG1TaW4gPSBfc2luKGFuZ2xlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdChtQ29zLCAtbVNpbiwgIDAsIDAsIG1TaW4sICBtQ29zLCAwLCAwLCAwLCAgMCwgIDEsIDAsIDAsIDAsIDAsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJvdGF0ZVgoYW5nbGUpe1xyXG4gICAgICAgIGlmKGFuZ2xlID09PSAwKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtQ29zID0gX2NvcyhhbmdsZSk7XHJcbiAgICAgICAgdmFyIG1TaW4gPSBfc2luKGFuZ2xlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdCgxLCAwLCAwLCAwLCAwLCBtQ29zLCAtbVNpbiwgMCwgMCwgbVNpbiwgIG1Db3MsIDAsIDAsIDAsIDAsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJvdGF0ZVkoYW5nbGUpe1xyXG4gICAgICAgIGlmKGFuZ2xlID09PSAwKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtQ29zID0gX2NvcyhhbmdsZSk7XHJcbiAgICAgICAgdmFyIG1TaW4gPSBfc2luKGFuZ2xlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdChtQ29zLCAgMCwgIG1TaW4sIDAsIDAsIDEsIDAsIDAsIC1tU2luLCAgMCwgIG1Db3MsIDAsIDAsIDAsIDAsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJvdGF0ZVooYW5nbGUpe1xyXG4gICAgICAgIGlmKGFuZ2xlID09PSAwKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtQ29zID0gX2NvcyhhbmdsZSk7XHJcbiAgICAgICAgdmFyIG1TaW4gPSBfc2luKGFuZ2xlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdChtQ29zLCAtbVNpbiwgIDAsIDAsIG1TaW4sICBtQ29zLCAwLCAwLCAwLCAgMCwgIDEsIDAsIDAsIDAsIDAsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNoZWFyKHN4LHN5KXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdCgxLCBzeSwgc3gsIDEsIDAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNrZXcoYXgsIGF5KXtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaGVhcihfdGFuKGF4KSwgX3RhbihheSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNrZXdGcm9tQXhpcyhheCwgYW5nbGUpe1xyXG4gICAgICAgIHZhciBtQ29zID0gX2NvcyhhbmdsZSk7XHJcbiAgICAgICAgdmFyIG1TaW4gPSBfc2luKGFuZ2xlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdChtQ29zLCBtU2luLCAgMCwgMCwgLW1TaW4sICBtQ29zLCAwLCAwLCAwLCAgMCwgIDEsIDAsIDAsIDAsIDAsIDEpXHJcbiAgICAgICAgICAgIC5fdCgxLCAwLCAgMCwgMCwgX3RhbihheCksICAxLCAwLCAwLCAwLCAgMCwgIDEsIDAsIDAsIDAsIDAsIDEpXHJcbiAgICAgICAgICAgIC5fdChtQ29zLCAtbVNpbiwgIDAsIDAsIG1TaW4sICBtQ29zLCAwLCAwLCAwLCAgMCwgIDEsIDAsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgIC8vcmV0dXJuIHRoaXMuX3QobUNvcywgbVNpbiwgLW1TaW4sIG1Db3MsIDAsIDApLl90KDEsIDAsIF90YW4oYXgpLCAxLCAwLCAwKS5fdChtQ29zLCAtbVNpbiwgbVNpbiwgbUNvcywgMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2NhbGUoc3gsIHN5LCBzeikge1xyXG4gICAgICAgIHN6ID0gaXNOYU4oc3opID8gMSA6IHN6O1xyXG4gICAgICAgIGlmKHN4ID09IDEgJiYgc3kgPT0gMSAmJiBzeiA9PSAxKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl90KHN4LCAwLCAwLCAwLCAwLCBzeSwgMCwgMCwgMCwgMCwgc3osIDAsIDAsIDAsIDAsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNldFRyYW5zZm9ybShhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wc1swXSA9IGE7XHJcbiAgICAgICAgdGhpcy5wcm9wc1sxXSA9IGI7XHJcbiAgICAgICAgdGhpcy5wcm9wc1syXSA9IGM7XHJcbiAgICAgICAgdGhpcy5wcm9wc1szXSA9IGQ7XHJcbiAgICAgICAgdGhpcy5wcm9wc1s0XSA9IGU7XHJcbiAgICAgICAgdGhpcy5wcm9wc1s1XSA9IGY7XHJcbiAgICAgICAgdGhpcy5wcm9wc1s2XSA9IGc7XHJcbiAgICAgICAgdGhpcy5wcm9wc1s3XSA9IGg7XHJcbiAgICAgICAgdGhpcy5wcm9wc1s4XSA9IGk7XHJcbiAgICAgICAgdGhpcy5wcm9wc1s5XSA9IGo7XHJcbiAgICAgICAgdGhpcy5wcm9wc1sxMF0gPSBrO1xyXG4gICAgICAgIHRoaXMucHJvcHNbMTFdID0gbDtcclxuICAgICAgICB0aGlzLnByb3BzWzEyXSA9IG07XHJcbiAgICAgICAgdGhpcy5wcm9wc1sxM10gPSBuO1xyXG4gICAgICAgIHRoaXMucHJvcHNbMTRdID0gbztcclxuICAgICAgICB0aGlzLnByb3BzWzE1XSA9IHA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKHR4LCB0eSwgdHopIHtcclxuICAgICAgICB0eiA9IHR6IHx8IDA7XHJcbiAgICAgICAgaWYodHggIT09IDAgfHwgdHkgIT09IDAgfHwgdHogIT09IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCx0eCx0eSx0eiwxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsIGcyLCBoMiwgaTIsIGoyLCBrMiwgbDIsIG0yLCBuMiwgbzIsIHAyKSB7XHJcblxyXG4gICAgICAgIHZhciBfcCA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgICAgIGlmKGEyID09PSAxICYmIGIyID09PSAwICYmIGMyID09PSAwICYmIGQyID09PSAwICYmIGUyID09PSAwICYmIGYyID09PSAxICYmIGcyID09PSAwICYmIGgyID09PSAwICYmIGkyID09PSAwICYmIGoyID09PSAwICYmIGsyID09PSAxICYmIGwyID09PSAwKXtcclxuICAgICAgICAgICAgLy9OT1RFOiBjb21tZW50aW5nIHRoaXMgY29uZGl0aW9uIGJlY2F1c2UgVHVyYm9GYW4gZGVvcHRpbWl6ZXMgY29kZSB3aGVuIHByZXNlbnRcclxuICAgICAgICAgICAgLy9pZihtMiAhPT0gMCB8fCBuMiAhPT0gMCB8fCBvMiAhPT0gMCl7XHJcbiAgICAgICAgICAgICAgICBfcFsxMl0gPSBfcFsxMl0gKiBhMiArIF9wWzE1XSAqIG0yO1xyXG4gICAgICAgICAgICAgICAgX3BbMTNdID0gX3BbMTNdICogZjIgKyBfcFsxNV0gKiBuMjtcclxuICAgICAgICAgICAgICAgIF9wWzE0XSA9IF9wWzE0XSAqIGsyICsgX3BbMTVdICogbzI7XHJcbiAgICAgICAgICAgICAgICBfcFsxNV0gPSBfcFsxNV0gKiBwMjtcclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgIHRoaXMuX2lkZW50aXR5Q2FsY3VsYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhMSA9IF9wWzBdO1xyXG4gICAgICAgIHZhciBiMSA9IF9wWzFdO1xyXG4gICAgICAgIHZhciBjMSA9IF9wWzJdO1xyXG4gICAgICAgIHZhciBkMSA9IF9wWzNdO1xyXG4gICAgICAgIHZhciBlMSA9IF9wWzRdO1xyXG4gICAgICAgIHZhciBmMSA9IF9wWzVdO1xyXG4gICAgICAgIHZhciBnMSA9IF9wWzZdO1xyXG4gICAgICAgIHZhciBoMSA9IF9wWzddO1xyXG4gICAgICAgIHZhciBpMSA9IF9wWzhdO1xyXG4gICAgICAgIHZhciBqMSA9IF9wWzldO1xyXG4gICAgICAgIHZhciBrMSA9IF9wWzEwXTtcclxuICAgICAgICB2YXIgbDEgPSBfcFsxMV07XHJcbiAgICAgICAgdmFyIG0xID0gX3BbMTJdO1xyXG4gICAgICAgIHZhciBuMSA9IF9wWzEzXTtcclxuICAgICAgICB2YXIgbzEgPSBfcFsxNF07XHJcbiAgICAgICAgdmFyIHAxID0gX3BbMTVdO1xyXG5cclxuICAgICAgICAvKiBtYXRyaXggb3JkZXIgKGNhbnZhcyBjb21wYXRpYmxlKTpcclxuICAgICAgICAgKiBhY2VcclxuICAgICAgICAgKiBiZGZcclxuICAgICAgICAgKiAwMDFcclxuICAgICAgICAgKi9cclxuICAgICAgICBfcFswXSA9IGExICogYTIgKyBiMSAqIGUyICsgYzEgKiBpMiArIGQxICogbTI7XHJcbiAgICAgICAgX3BbMV0gPSBhMSAqIGIyICsgYjEgKiBmMiArIGMxICogajIgKyBkMSAqIG4yIDtcclxuICAgICAgICBfcFsyXSA9IGExICogYzIgKyBiMSAqIGcyICsgYzEgKiBrMiArIGQxICogbzIgO1xyXG4gICAgICAgIF9wWzNdID0gYTEgKiBkMiArIGIxICogaDIgKyBjMSAqIGwyICsgZDEgKiBwMiA7XHJcblxyXG4gICAgICAgIF9wWzRdID0gZTEgKiBhMiArIGYxICogZTIgKyBnMSAqIGkyICsgaDEgKiBtMiA7XHJcbiAgICAgICAgX3BbNV0gPSBlMSAqIGIyICsgZjEgKiBmMiArIGcxICogajIgKyBoMSAqIG4yIDtcclxuICAgICAgICBfcFs2XSA9IGUxICogYzIgKyBmMSAqIGcyICsgZzEgKiBrMiArIGgxICogbzIgO1xyXG4gICAgICAgIF9wWzddID0gZTEgKiBkMiArIGYxICogaDIgKyBnMSAqIGwyICsgaDEgKiBwMiA7XHJcblxyXG4gICAgICAgIF9wWzhdID0gaTEgKiBhMiArIGoxICogZTIgKyBrMSAqIGkyICsgbDEgKiBtMiA7XHJcbiAgICAgICAgX3BbOV0gPSBpMSAqIGIyICsgajEgKiBmMiArIGsxICogajIgKyBsMSAqIG4yIDtcclxuICAgICAgICBfcFsxMF0gPSBpMSAqIGMyICsgajEgKiBnMiArIGsxICogazIgKyBsMSAqIG8yIDtcclxuICAgICAgICBfcFsxMV0gPSBpMSAqIGQyICsgajEgKiBoMiArIGsxICogbDIgKyBsMSAqIHAyIDtcclxuXHJcbiAgICAgICAgX3BbMTJdID0gbTEgKiBhMiArIG4xICogZTIgKyBvMSAqIGkyICsgcDEgKiBtMiA7XHJcbiAgICAgICAgX3BbMTNdID0gbTEgKiBiMiArIG4xICogZjIgKyBvMSAqIGoyICsgcDEgKiBuMiA7XHJcbiAgICAgICAgX3BbMTRdID0gbTEgKiBjMiArIG4xICogZzIgKyBvMSAqIGsyICsgcDEgKiBvMiA7XHJcbiAgICAgICAgX3BbMTVdID0gbTEgKiBkMiArIG4xICogaDIgKyBvMSAqIGwyICsgcDEgKiBwMiA7XHJcblxyXG4gICAgICAgIHRoaXMuX2lkZW50aXR5Q2FsY3VsYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpdHkoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuX2lkZW50aXR5Q2FsY3VsYXRlZCl7XHJcbiAgICAgICAgICAgIHRoaXMuX2lkZW50aXR5ID0gISh0aGlzLnByb3BzWzBdICE9PSAxIHx8IHRoaXMucHJvcHNbMV0gIT09IDAgfHwgdGhpcy5wcm9wc1syXSAhPT0gMCB8fCB0aGlzLnByb3BzWzNdICE9PSAwIHx8IHRoaXMucHJvcHNbNF0gIT09IDAgfHwgdGhpcy5wcm9wc1s1XSAhPT0gMSB8fCB0aGlzLnByb3BzWzZdICE9PSAwIHx8IHRoaXMucHJvcHNbN10gIT09IDAgfHwgdGhpcy5wcm9wc1s4XSAhPT0gMCB8fCB0aGlzLnByb3BzWzldICE9PSAwIHx8IHRoaXMucHJvcHNbMTBdICE9PSAxIHx8IHRoaXMucHJvcHNbMTFdICE9PSAwIHx8IHRoaXMucHJvcHNbMTJdICE9PSAwIHx8IHRoaXMucHJvcHNbMTNdICE9PSAwIHx8IHRoaXMucHJvcHNbMTRdICE9PSAwIHx8IHRoaXMucHJvcHNbMTVdICE9PSAxKTtcclxuICAgICAgICAgICAgdGhpcy5faWRlbnRpdHlDYWxjdWxhdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkZW50aXR5O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGVxdWFscyhtYXRyKXtcclxuICAgICAgICB2YXIgaSA9IDA7XHJcbiAgICAgICAgd2hpbGUgKGkgPCAxNikge1xyXG4gICAgICAgICAgICBpZihtYXRyLnByb3BzW2ldICE9PSB0aGlzLnByb3BzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSs9MTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvbmUobWF0cil7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgZm9yKGk9MDtpPDE2O2krPTEpe1xyXG4gICAgICAgICAgICBtYXRyLnByb3BzW2ldID0gdGhpcy5wcm9wc1tpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvbmVGcm9tUHJvcHMocHJvcHMpe1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIGZvcihpPTA7aTwxNjtpKz0xKXtcclxuICAgICAgICAgICAgdGhpcy5wcm9wc1tpXSA9IHByb3BzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBseVRvUG9pbnQoeCwgeSwgeikge1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB4OiB4ICogdGhpcy5wcm9wc1swXSArIHkgKiB0aGlzLnByb3BzWzRdICsgeiAqIHRoaXMucHJvcHNbOF0gKyB0aGlzLnByb3BzWzEyXSxcclxuICAgICAgICAgICAgeTogeCAqIHRoaXMucHJvcHNbMV0gKyB5ICogdGhpcy5wcm9wc1s1XSArIHogKiB0aGlzLnByb3BzWzldICsgdGhpcy5wcm9wc1sxM10sXHJcbiAgICAgICAgICAgIHo6IHggKiB0aGlzLnByb3BzWzJdICsgeSAqIHRoaXMucHJvcHNbNl0gKyB6ICogdGhpcy5wcm9wc1sxMF0gKyB0aGlzLnByb3BzWzE0XVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLypyZXR1cm4ge1xyXG4gICAgICAgICB4OiB4ICogbWUuYSArIHkgKiBtZS5jICsgbWUuZSxcclxuICAgICAgICAgeTogeCAqIG1lLmIgKyB5ICogbWUuZCArIG1lLmZcclxuICAgICAgICAgfTsqL1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYXBwbHlUb1goeCwgeSwgeikge1xyXG4gICAgICAgIHJldHVybiB4ICogdGhpcy5wcm9wc1swXSArIHkgKiB0aGlzLnByb3BzWzRdICsgeiAqIHRoaXMucHJvcHNbOF0gKyB0aGlzLnByb3BzWzEyXTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFwcGx5VG9ZKHgsIHksIHopIHtcclxuICAgICAgICByZXR1cm4geCAqIHRoaXMucHJvcHNbMV0gKyB5ICogdGhpcy5wcm9wc1s1XSArIHogKiB0aGlzLnByb3BzWzldICsgdGhpcy5wcm9wc1sxM107XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcHBseVRvWih4LCB5LCB6KSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB0aGlzLnByb3BzWzJdICsgeSAqIHRoaXMucHJvcHNbNl0gKyB6ICogdGhpcy5wcm9wc1sxMF0gKyB0aGlzLnByb3BzWzE0XTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnZlcnNlUG9pbnQocHQpIHtcclxuICAgICAgICB2YXIgZGV0ZXJtaW5hbnQgPSB0aGlzLnByb3BzWzBdICogdGhpcy5wcm9wc1s1XSAtIHRoaXMucHJvcHNbMV0gKiB0aGlzLnByb3BzWzRdO1xyXG4gICAgICAgIHZhciBhID0gdGhpcy5wcm9wc1s1XS9kZXRlcm1pbmFudDtcclxuICAgICAgICB2YXIgYiA9IC0gdGhpcy5wcm9wc1sxXS9kZXRlcm1pbmFudDtcclxuICAgICAgICB2YXIgYyA9IC0gdGhpcy5wcm9wc1s0XS9kZXRlcm1pbmFudDtcclxuICAgICAgICB2YXIgZCA9IHRoaXMucHJvcHNbMF0vZGV0ZXJtaW5hbnQ7XHJcbiAgICAgICAgdmFyIGUgPSAodGhpcy5wcm9wc1s0XSAqIHRoaXMucHJvcHNbMTNdIC0gdGhpcy5wcm9wc1s1XSAqIHRoaXMucHJvcHNbMTJdKS9kZXRlcm1pbmFudDtcclxuICAgICAgICB2YXIgZiA9IC0gKHRoaXMucHJvcHNbMF0gKiB0aGlzLnByb3BzWzEzXSAtIHRoaXMucHJvcHNbMV0gKiB0aGlzLnByb3BzWzEyXSkvZGV0ZXJtaW5hbnQ7XHJcbiAgICAgICAgcmV0dXJuIFtwdFswXSAqIGEgKyBwdFsxXSAqIGMgKyBlLCBwdFswXSAqIGIgKyBwdFsxXSAqIGQgKyBmLCAwXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnZlcnNlUG9pbnRzKHB0cyl7XHJcbiAgICAgICAgdmFyIGksIGxlbiA9IHB0cy5sZW5ndGgsIHJldFB0cyA9IFtdO1xyXG4gICAgICAgIGZvcihpPTA7aTxsZW47aSs9MSl7XHJcbiAgICAgICAgICAgIHJldFB0c1tpXSA9IGludmVyc2VQb2ludChwdHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0UHRzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFwcGx5VG9UcmlwbGVQb2ludHMocHQxLCBwdDIsIHB0Mykge1xyXG4gICAgICAgIHZhciBhcnIgPSBjcmVhdGVUeXBlZEFycmF5KCdmbG9hdDMyJywgNik7XHJcbiAgICAgICAgaWYodGhpcy5pc0lkZW50aXR5KCkpIHtcclxuICAgICAgICAgICAgYXJyWzBdID0gcHQxWzBdO1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBwdDFbMV07XHJcbiAgICAgICAgICAgIGFyclsyXSA9IHB0MlswXTtcclxuICAgICAgICAgICAgYXJyWzNdID0gcHQyWzFdO1xyXG4gICAgICAgICAgICBhcnJbNF0gPSBwdDNbMF07XHJcbiAgICAgICAgICAgIGFycls1XSA9IHB0M1sxXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgcDAgPSB0aGlzLnByb3BzWzBdLCBwMSA9IHRoaXMucHJvcHNbMV0sIHA0ID0gdGhpcy5wcm9wc1s0XSwgcDUgPSB0aGlzLnByb3BzWzVdLCBwMTIgPSB0aGlzLnByb3BzWzEyXSwgcDEzID0gdGhpcy5wcm9wc1sxM107XHJcbiAgICAgICAgICAgIGFyclswXSA9IHB0MVswXSAqIHAwICsgcHQxWzFdICogcDQgKyBwMTI7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IHB0MVswXSAqIHAxICsgcHQxWzFdICogcDUgKyBwMTM7XHJcbiAgICAgICAgICAgIGFyclsyXSA9IHB0MlswXSAqIHAwICsgcHQyWzFdICogcDQgKyBwMTI7XHJcbiAgICAgICAgICAgIGFyclszXSA9IHB0MlswXSAqIHAxICsgcHQyWzFdICogcDUgKyBwMTM7XHJcbiAgICAgICAgICAgIGFycls0XSA9IHB0M1swXSAqIHAwICsgcHQzWzFdICogcDQgKyBwMTI7XHJcbiAgICAgICAgICAgIGFycls1XSA9IHB0M1swXSAqIHAxICsgcHQzWzFdICogcDUgKyBwMTM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwbHlUb1BvaW50QXJyYXkoeCx5LHope1xyXG4gICAgICAgIHZhciBhcnI7XHJcbiAgICAgICAgaWYodGhpcy5pc0lkZW50aXR5KCkpIHtcclxuICAgICAgICAgICAgYXJyID0gW3gseSx6XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhcnIgPSBbeCAqIHRoaXMucHJvcHNbMF0gKyB5ICogdGhpcy5wcm9wc1s0XSArIHogKiB0aGlzLnByb3BzWzhdICsgdGhpcy5wcm9wc1sxMl0seCAqIHRoaXMucHJvcHNbMV0gKyB5ICogdGhpcy5wcm9wc1s1XSArIHogKiB0aGlzLnByb3BzWzldICsgdGhpcy5wcm9wc1sxM10seCAqIHRoaXMucHJvcHNbMl0gKyB5ICogdGhpcy5wcm9wc1s2XSArIHogKiB0aGlzLnByb3BzWzEwXSArIHRoaXMucHJvcHNbMTRdXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBseVRvUG9pbnRTdHJpbmdpZmllZCh4LCB5KSB7XHJcbiAgICAgICAgaWYodGhpcy5pc0lkZW50aXR5KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggKyAnLCcgKyB5O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKHggKiB0aGlzLnByb3BzWzBdICsgeSAqIHRoaXMucHJvcHNbNF0gKyB0aGlzLnByb3BzWzEyXSkrJywnKyh4ICogdGhpcy5wcm9wc1sxXSArIHkgKiB0aGlzLnByb3BzWzVdICsgdGhpcy5wcm9wc1sxM10pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvQ1NTKCkge1xyXG4gICAgICAgIC8vRG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gYWRkIHRoaXMgb3B0aW1pemF0aW9uLiBJZiBpdCBpcyBhbiBpZGVudGl0eSBtYXRyaXgsIGl0J3MgdmVyeSBsaWtlbHkgdGhpcyB3aWxsIGdldCBjYWxsZWQgb25seSBvbmNlIHNpbmNlIGl0IHdvbid0IGJlIGtleWZyYW1lZC5cclxuICAgICAgICAvKmlmKHRoaXMuaXNJZGVudGl0eSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9Ki9cclxuICAgICAgICB2YXIgaSA9IDA7XHJcbiAgICAgICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcclxuICAgICAgICB2YXIgY3NzVmFsdWUgPSAnbWF0cml4M2QoJztcclxuICAgICAgICB2YXIgdiA9IDEwMDAwO1xyXG4gICAgICAgIHdoaWxlKGk8MTYpe1xyXG4gICAgICAgICAgICBjc3NWYWx1ZSArPSBfcm5kKHByb3BzW2ldKnYpL3Y7XHJcbiAgICAgICAgICAgIGNzc1ZhbHVlICs9IGkgPT09IDE1ID8gJyknOicsJztcclxuICAgICAgICAgICAgaSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3NzVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdG8yZENTUygpIHtcclxuICAgICAgICAvL0RvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIGFkZCB0aGlzIG9wdGltaXphdGlvbi4gSWYgaXQgaXMgYW4gaWRlbnRpdHkgbWF0cml4LCBpdCdzIHZlcnkgbGlrZWx5IHRoaXMgd2lsbCBnZXQgY2FsbGVkIG9ubHkgb25jZSBzaW5jZSBpdCB3b24ndCBiZSBrZXlmcmFtZWQuXHJcbiAgICAgICAgLyppZih0aGlzLmlzSWRlbnRpdHkoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgdmFyIHYgPSAxMDAwMDtcclxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHJldHVybiBcIm1hdHJpeChcIiArIF9ybmQocHJvcHNbMF0qdikvdiArICcsJyArIF9ybmQocHJvcHNbMV0qdikvdiArICcsJyArIF9ybmQocHJvcHNbNF0qdikvdiArICcsJyArIF9ybmQocHJvcHNbNV0qdikvdiArICcsJyArIF9ybmQocHJvcHNbMTJdKnYpL3YgKyAnLCcgKyBfcm5kKHByb3BzWzEzXSp2KS92ICsgXCIpXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gTWF0cml4SW5zdGFuY2UoKXtcclxuICAgICAgICB0aGlzLnJlc2V0ID0gcmVzZXQ7XHJcbiAgICAgICAgdGhpcy5yb3RhdGUgPSByb3RhdGU7XHJcbiAgICAgICAgdGhpcy5yb3RhdGVYID0gcm90YXRlWDtcclxuICAgICAgICB0aGlzLnJvdGF0ZVkgPSByb3RhdGVZO1xyXG4gICAgICAgIHRoaXMucm90YXRlWiA9IHJvdGF0ZVo7XHJcbiAgICAgICAgdGhpcy5za2V3ID0gc2tldztcclxuICAgICAgICB0aGlzLnNrZXdGcm9tQXhpcyA9IHNrZXdGcm9tQXhpcztcclxuICAgICAgICB0aGlzLnNoZWFyID0gc2hlYXI7XHJcbiAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xyXG4gICAgICAgIHRoaXMuc2V0VHJhbnNmb3JtID0gc2V0VHJhbnNmb3JtO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlID0gdHJhbnNsYXRlO1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xyXG4gICAgICAgIHRoaXMuYXBwbHlUb1BvaW50ID0gYXBwbHlUb1BvaW50O1xyXG4gICAgICAgIHRoaXMuYXBwbHlUb1ggPSBhcHBseVRvWDtcclxuICAgICAgICB0aGlzLmFwcGx5VG9ZID0gYXBwbHlUb1k7XHJcbiAgICAgICAgdGhpcy5hcHBseVRvWiA9IGFwcGx5VG9aO1xyXG4gICAgICAgIHRoaXMuYXBwbHlUb1BvaW50QXJyYXkgPSBhcHBseVRvUG9pbnRBcnJheTtcclxuICAgICAgICB0aGlzLmFwcGx5VG9UcmlwbGVQb2ludHMgPSBhcHBseVRvVHJpcGxlUG9pbnRzO1xyXG4gICAgICAgIHRoaXMuYXBwbHlUb1BvaW50U3RyaW5naWZpZWQgPSBhcHBseVRvUG9pbnRTdHJpbmdpZmllZDtcclxuICAgICAgICB0aGlzLnRvQ1NTID0gdG9DU1M7XHJcbiAgICAgICAgdGhpcy50bzJkQ1NTID0gdG8yZENTUztcclxuICAgICAgICB0aGlzLmNsb25lID0gY2xvbmU7XHJcbiAgICAgICAgdGhpcy5jbG9uZUZyb21Qcm9wcyA9IGNsb25lRnJvbVByb3BzO1xyXG4gICAgICAgIHRoaXMuZXF1YWxzID0gZXF1YWxzO1xyXG4gICAgICAgIHRoaXMuaW52ZXJzZVBvaW50cyA9IGludmVyc2VQb2ludHM7XHJcbiAgICAgICAgdGhpcy5pbnZlcnNlUG9pbnQgPSBpbnZlcnNlUG9pbnQ7XHJcbiAgICAgICAgdGhpcy5fdCA9IHRoaXMudHJhbnNmb3JtO1xyXG4gICAgICAgIHRoaXMuaXNJZGVudGl0eSA9IGlzSWRlbnRpdHk7XHJcbiAgICAgICAgdGhpcy5faWRlbnRpdHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2lkZW50aXR5Q2FsY3VsYXRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnByb3BzID0gY3JlYXRlVHlwZWRBcnJheSgnZmxvYXQzMicsIDE2KTtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hdHJpeEluc3RhbmNlKClcclxuICAgIH1cclxufSgpKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4OyIsInZhciBjcmVhdGVUeXBlZEFycmF5ID0gKGZ1bmN0aW9uKCl7XHJcblx0ZnVuY3Rpb24gY3JlYXRlUmVndWxhckFycmF5KHR5cGUsIGxlbil7XHJcblx0XHR2YXIgaSA9IDAsIGFyciA9IFtdLCB2YWx1ZTtcclxuXHRcdHN3aXRjaCh0eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2ludDE2JzpcclxuXHRcdFx0Y2FzZSAndWludDhjJzpcclxuXHRcdFx0XHR2YWx1ZSA9IDE7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dmFsdWUgPSAxLjE7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRmb3IoaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xyXG5cdFx0XHRhcnIucHVzaCh2YWx1ZSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYXJyO1xyXG5cdH1cclxuXHRmdW5jdGlvbiBjcmVhdGVUeXBlZEFycmF5KHR5cGUsIGxlbil7XHJcblx0XHRpZih0eXBlID09PSAnZmxvYXQzMicpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcclxuXHRcdH0gZWxzZSBpZih0eXBlID09PSAnaW50MTYnKSB7XHJcblx0XHRcdHJldHVybiBuZXcgSW50MTZBcnJheShsZW4pO1xyXG5cdFx0fSBlbHNlIGlmKHR5cGUgPT09ICd1aW50OGMnKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVWludDhDbGFtcGVkQXJyYXkobGVuKTtcclxuXHRcdH1cclxuXHR9XHJcblx0aWYodHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdHJldHVybiBjcmVhdGVUeXBlZEFycmF5O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gY3JlYXRlUmVndWxhckFycmF5O1xyXG5cdH1cclxufSgpKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlVHlwZWRBcnJheTtcclxuIiwidmFyIEFuaW1hdGlvbkl0ZW0gPSByZXF1aXJlKCcuL2FuaW1hdGlvbi9BbmltYXRpb25JdGVtJyk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBbmltYXRpb25BcGkoYW5pbSkge1xyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBBbmltYXRpb25JdGVtKGFuaW0pKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcblx0Y3JlYXRlQW5pbWF0aW9uQXBpIDogY3JlYXRlQW5pbWF0aW9uQXBpXHJcbn0iLCJ2YXIga2V5UGF0aEJ1aWxkZXIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2tleVBhdGhCdWlsZGVyJyk7XHJcbnZhciBsYXllcl90eXBlcyA9IHJlcXVpcmUoJy4uL2VudW1zL2xheWVyX3R5cGVzJyk7XHJcblxyXG5mdW5jdGlvbiBLZXlQYXRoTGlzdChlbGVtZW50cywgbm9kZV90eXBlKSB7XHJcblxyXG5cdGZ1bmN0aW9uIF9nZXRMZW5ndGgoKSB7XHJcblx0XHRyZXR1cm4gZWxlbWVudHMubGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2ZpbHRlckxheWVyQnlUeXBlKGVsZW1lbnRzLCB0eXBlKSB7XHJcblx0XHRyZXR1cm4gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0cmV0dXJuIGVsZW1lbnQuZ2V0VGFyZ2V0TGF5ZXIoKS5kYXRhLnR5ID09PSBsYXllcl90eXBlc1t0eXBlXTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2ZpbHRlckxheWVyQnlOYW1lKGVsZW1lbnRzLCBuYW1lKSB7XHJcblx0XHRyZXR1cm4gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0cmV0dXJuIGVsZW1lbnQuZ2V0VGFyZ2V0TGF5ZXIoKS5kYXRhLm5tID09PSBuYW1lO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfZmlsdGVyTGF5ZXJCeVByb3BlcnR5KGVsZW1lbnRzLCBuYW1lKSB7XHJcblx0XHRyZXR1cm4gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHRcdFx0aWYoZWxlbWVudC5oYXNQcm9wZXJ0eShuYW1lKSkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtZW50LmdldFByb3BlcnR5KG5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0TGF5ZXJzQnlUeXBlKHNlbGVjdG9yKSB7XHJcblx0XHRyZXR1cm4gS2V5UGF0aExpc3QoX2ZpbHRlckxheWVyQnlUeXBlKGVsZW1lbnRzLCBzZWxlY3RvciksICdsYXllcicpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0TGF5ZXJzQnlOYW1lKHNlbGVjdG9yKSB7XHJcblx0XHRyZXR1cm4gS2V5UGF0aExpc3QoX2ZpbHRlckxheWVyQnlOYW1lKGVsZW1lbnRzLCBzZWxlY3RvciksICdsYXllcicpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0UHJvcGVydGllc0J5U2VsZWN0b3Ioc2VsZWN0b3IpIHtcclxuXHRcdHJldHVybiBLZXlQYXRoTGlzdChlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbWVudC5oYXNQcm9wZXJ0eShzZWxlY3Rvcik7XHJcblx0XHR9KS5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbWVudC5nZXRQcm9wZXJ0eShzZWxlY3Rvcik7XHJcblx0XHR9KSwgJ3Byb3BlcnR5Jyk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRMYXllclByb3BlcnR5KHNlbGVjdG9yKSB7XHJcblx0XHR2YXIgbGF5ZXJzID0gX2ZpbHRlckxheWVyQnlQcm9wZXJ0eShlbGVtZW50cywgc2VsZWN0b3IpO1xyXG5cdFx0dmFyIHByb3BlcnRpZXMgPSBsYXllcnMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpe1xyXG5cdFx0XHRyZXR1cm4gZWxlbWVudC5nZXRQcm9wZXJ0eShzZWxlY3Rvcik7XHJcblx0XHR9KVxyXG5cdFx0cmV0dXJuIEtleVBhdGhMaXN0KHByb3BlcnRpZXMsICdwcm9wZXJ0eScpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0S2V5UGF0aChwcm9wZXJ0eVBhdGgpIHtcclxuXHRcdHZhciBrZXlQYXRoRGF0YSA9IGtleVBhdGhCdWlsZGVyKHByb3BlcnR5UGF0aCk7XHJcblx0XHR2YXIgc2VsZWN0b3IgPSBrZXlQYXRoRGF0YS5zZWxlY3RvcjtcclxuXHRcdHZhciBub2Rlc0J5TmFtZSwgbm9kZXNCeVR5cGUsIHNlbGVjdGVkTm9kZXM7XHJcblx0XHRpZiAobm9kZV90eXBlID09PSAncmVuZGVyZXInIHx8IG5vZGVfdHlwZSA9PT0gJ2xheWVyJykge1xyXG5cdFx0XHRub2Rlc0J5TmFtZSA9IGdldExheWVyc0J5TmFtZShzZWxlY3Rvcik7XHJcblx0XHRcdG5vZGVzQnlUeXBlID0gZ2V0TGF5ZXJzQnlUeXBlKHNlbGVjdG9yKTtcclxuXHRcdFx0aWYgKG5vZGVzQnlOYW1lLmxlbmd0aCA9PT0gMCAmJiBub2Rlc0J5VHlwZS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHRzZWxlY3RlZE5vZGVzID0gZ2V0TGF5ZXJQcm9wZXJ0eShzZWxlY3Rvcik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c2VsZWN0ZWROb2RlcyA9IG5vZGVzQnlOYW1lLmNvbmNhdChub2Rlc0J5VHlwZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGtleVBhdGhEYXRhLnByb3BlcnR5UGF0aCkge1xyXG5cdFx0XHRcdHJldHVybiBzZWxlY3RlZE5vZGVzLmdldEtleVBhdGgoa2V5UGF0aERhdGEucHJvcGVydHlQYXRoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4gc2VsZWN0ZWROb2RlcztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmKG5vZGVfdHlwZSA9PT0gJ3Byb3BlcnR5Jykge1xyXG5cdFx0XHRzZWxlY3RlZE5vZGVzID0gZ2V0UHJvcGVydGllc0J5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG5cdFx0XHRpZiAoa2V5UGF0aERhdGEucHJvcGVydHlQYXRoKSB7XHJcblx0XHRcdFx0cmV0dXJuIHNlbGVjdGVkTm9kZXMuZ2V0S2V5UGF0aChrZXlQYXRoRGF0YS5wcm9wZXJ0eVBhdGgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiBzZWxlY3RlZE5vZGVzO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjb25jYXQobm9kZXMpIHtcclxuXHRcdHZhciBub2Rlc0VsZW1lbnRzID0gbm9kZXMuZ2V0RWxlbWVudHMoKTtcclxuXHRcdHJldHVybiBLZXlQYXRoTGlzdChlbGVtZW50cy5jb25jYXQobm9kZXNFbGVtZW50cyksIG5vZGVfdHlwZSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRFbGVtZW50cygpIHtcclxuXHRcdHJldHVybiBlbGVtZW50cztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldFByb3BlcnR5QXRJbmRleChpbmRleCkge1xyXG5cdFx0cmV0dXJuIGVsZW1lbnRzW2luZGV4XTtcclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdFx0Z2V0S2V5UGF0aDogZ2V0S2V5UGF0aCxcclxuXHRcdGNvbmNhdDogY29uY2F0LFxyXG5cdFx0Z2V0RWxlbWVudHM6IGdldEVsZW1lbnRzLFxyXG5cdFx0Z2V0UHJvcGVydHlBdEluZGV4OiBnZXRQcm9wZXJ0eUF0SW5kZXhcclxuXHR9XHJcblxyXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRob2RzLCAnbGVuZ3RoJywge1xyXG5cdFx0Z2V0OiBfZ2V0TGVuZ3RoXHJcblx0fSk7XHJcblxyXG5cdHJldHVybiBtZXRob2RzO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhdGhMaXN0OyIsInZhciBrZXlfcGF0aF9zZXBhcmF0b3IgPSByZXF1aXJlKCcuLi9lbnVtcy9rZXlfcGF0aF9zZXBhcmF0b3InKTtcclxudmFyIHByb3BlcnR5X25hbWVzID0gcmVxdWlyZSgnLi4vZW51bXMvcHJvcGVydHlfbmFtZXMnKTtcclxuXHJcbmZ1bmN0aW9uIEtleVBhdGhOb2RlKHN0YXRlKSB7XHJcblxyXG5cdGZ1bmN0aW9uIGdldFByb3BlcnR5QnlQYXRoKHNlbGVjdG9yLCBwcm9wZXJ0eVBhdGgpIHtcclxuXHRcdHZhciBpbnN0YW5jZVByb3BlcnRpZXMgPSBzdGF0ZS5wcm9wZXJ0aWVzIHx8IFtdO1xyXG5cdFx0dmFyIGkgPSAwLCBsZW4gPSBpbnN0YW5jZVByb3BlcnRpZXMubGVuZ3RoO1xyXG5cdFx0d2hpbGUoaSA8IGxlbikge1xyXG5cdFx0XHRpZihpbnN0YW5jZVByb3BlcnRpZXNbaV0ubmFtZSA9PT0gc2VsZWN0b3IpIHtcclxuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2VQcm9wZXJ0aWVzW2ldLnZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGkgKz0gMTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBudWxsO1xyXG5cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGhhc1Byb3BlcnR5KHNlbGVjdG9yKSB7XHJcblx0XHRyZXR1cm4gISFnZXRQcm9wZXJ0eUJ5UGF0aChzZWxlY3Rvcik7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRQcm9wZXJ0eShzZWxlY3Rvcikge1xyXG5cdFx0cmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKHNlbGVjdG9yKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGZyb21LZXlwYXRoTGF5ZXJQb2ludChwb2ludCkge1xyXG5cdFx0cmV0dXJuIHN0YXRlLnBhcmVudC5mcm9tS2V5cGF0aExheWVyUG9pbnQocG9pbnQpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gdG9LZXlwYXRoTGF5ZXJQb2ludChwb2ludCkge1xyXG5cdFx0cmV0dXJuIHN0YXRlLnBhcmVudC50b0tleXBhdGhMYXllclBvaW50KHBvaW50KTtcclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdFx0aGFzUHJvcGVydHk6IGhhc1Byb3BlcnR5LFxyXG5cdFx0Z2V0UHJvcGVydHk6IGdldFByb3BlcnR5LFxyXG5cdFx0ZnJvbUtleXBhdGhMYXllclBvaW50OiBmcm9tS2V5cGF0aExheWVyUG9pbnQsXHJcblx0XHR0b0tleXBhdGhMYXllclBvaW50OiB0b0tleXBhdGhMYXllclBvaW50XHJcblx0fVxyXG5cdHJldHVybiBtZXRob2RzO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhdGhOb2RlOyIsInZhciBLZXlQYXRoTm9kZSA9IHJlcXVpcmUoJy4uL2tleV9wYXRoL0tleVBhdGhOb2RlJyk7XHJcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL3RyYW5zZm9ybS9UcmFuc2Zvcm0nKTtcclxudmFyIEVmZmVjdHMgPSByZXF1aXJlKCcuL2VmZmVjdHMvRWZmZWN0cycpO1xyXG52YXIgTWF0cml4ID0gcmVxdWlyZSgnLi4vaGVscGVycy90cmFuc2Zvcm1hdGlvbk1hdHJpeCcpO1xyXG5cclxuZnVuY3Rpb24gTGF5ZXJCYXNlKHN0YXRlKSB7XHJcblxyXG5cdHZhciB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0oc3RhdGUuZWxlbWVudC5maW5hbFRyYW5zZm9ybS5tUHJvcCwgc3RhdGUpO1xyXG5cdHZhciBlZmZlY3RzID0gRWZmZWN0cyhzdGF0ZS5lbGVtZW50LmVmZmVjdHNNYW5hZ2VyLmVmZmVjdEVsZW1lbnRzIHx8IFtdLCBzdGF0ZSk7XHJcblxyXG5cdGZ1bmN0aW9uIF9idWlsZFByb3BlcnR5TWFwKCkge1xyXG5cdFx0c3RhdGUucHJvcGVydGllcy5wdXNoKHtcclxuXHRcdFx0bmFtZTogJ3RyYW5zZm9ybScsXHJcblx0XHRcdHZhbHVlOiB0cmFuc2Zvcm1cclxuXHRcdH0se1xyXG5cdFx0XHRuYW1lOiAnVHJhbnNmb3JtJyxcclxuXHRcdFx0dmFsdWU6IHRyYW5zZm9ybVxyXG5cdFx0fSx7XHJcblx0XHRcdG5hbWU6ICdFZmZlY3RzJyxcclxuXHRcdFx0dmFsdWU6IGVmZmVjdHNcclxuXHRcdH0se1xyXG5cdFx0XHRuYW1lOiAnZWZmZWN0cycsXHJcblx0XHRcdHZhbHVlOiBlZmZlY3RzXHJcblx0XHR9KVxyXG5cdH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRFbGVtZW50VG9Qb2ludChwb2ludCkge1xyXG4gICAgfVxyXG5cclxuXHRmdW5jdGlvbiB0b0tleXBhdGhMYXllclBvaW50KHBvaW50KSB7XHJcblx0XHR2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQ7XHJcbiAgICBcdGlmKHN0YXRlLnBhcmVudC50b0tleXBhdGhMYXllclBvaW50KSB7XHJcbiAgICAgICAgXHRwb2ludCA9IHN0YXRlLnBhcmVudC50b0tleXBhdGhMYXllclBvaW50KHBvaW50KTtcclxuICAgICAgICB9XHJcbiAgICBcdHZhciB0b1dvcmxkTWF0ID0gTWF0cml4KCk7XHJcbiAgICAgICAgdmFyIHRyYW5zZm9ybU1hdCA9IHN0YXRlLmdldFByb3BlcnR5KCdUcmFuc2Zvcm0nKS5nZXRUYXJnZXRUcmFuc2Zvcm0oKTtcclxuICAgICAgICB0cmFuc2Zvcm1NYXQuYXBwbHlUb01hdHJpeCh0b1dvcmxkTWF0KTtcclxuICAgICAgICBpZihlbGVtZW50LmhpZXJhcmNoeSAmJiBlbGVtZW50LmhpZXJhcmNoeS5sZW5ndGgpe1xyXG4gICAgICAgICAgICB2YXIgaSwgbGVuID0gZWxlbWVudC5oaWVyYXJjaHkubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IoaT0wO2k8bGVuO2krPTEpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5oaWVyYXJjaHlbaV0uZmluYWxUcmFuc2Zvcm0ubVByb3AuYXBwbHlUb01hdHJpeCh0b1dvcmxkTWF0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG9Xb3JsZE1hdC5pbnZlcnNlUG9pbnQocG9pbnQpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZnJvbUtleXBhdGhMYXllclBvaW50KHBvaW50KSB7XHJcblx0XHR2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQ7XHJcblx0XHR2YXIgdG9Xb3JsZE1hdCA9IE1hdHJpeCgpO1xyXG4gICAgICAgIHZhciB0cmFuc2Zvcm1NYXQgPSBzdGF0ZS5nZXRQcm9wZXJ0eSgnVHJhbnNmb3JtJykuZ2V0VGFyZ2V0VHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdHJhbnNmb3JtTWF0LmFwcGx5VG9NYXRyaXgodG9Xb3JsZE1hdCk7XHJcbiAgICAgICAgaWYoZWxlbWVudC5oaWVyYXJjaHkgJiYgZWxlbWVudC5oaWVyYXJjaHkubGVuZ3RoKXtcclxuICAgICAgICAgICAgdmFyIGksIGxlbiA9IGVsZW1lbnQuaGllcmFyY2h5Lmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yKGk9MDtpPGxlbjtpKz0xKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuaGllcmFyY2h5W2ldLmZpbmFsVHJhbnNmb3JtLm1Qcm9wLmFwcGx5VG9NYXRyaXgodG9Xb3JsZE1hdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcG9pbnQgPSB0b1dvcmxkTWF0LmFwcGx5VG9Qb2ludEFycmF5KHBvaW50WzBdLHBvaW50WzFdLHBvaW50WzJdfHwwKTtcclxuICAgICAgICBpZihzdGF0ZS5wYXJlbnQuZnJvbUtleXBhdGhMYXllclBvaW50KSB7XHJcbiAgICAgICAgXHRyZXR1cm4gc3RhdGUucGFyZW50LmZyb21LZXlwYXRoTGF5ZXJQb2ludChwb2ludCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcdHJldHVybiBwb2ludDtcclxuICAgICAgICB9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRUYXJnZXRMYXllcigpIHtcclxuXHRcdHJldHVybiBzdGF0ZS5lbGVtZW50O1xyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0XHRnZXRUYXJnZXRMYXllcjogZ2V0VGFyZ2V0TGF5ZXIsXHJcblx0XHR0b0tleXBhdGhMYXllclBvaW50OiB0b0tleXBhdGhMYXllclBvaW50LFxyXG5cdFx0ZnJvbUtleXBhdGhMYXllclBvaW50OiBmcm9tS2V5cGF0aExheWVyUG9pbnRcclxuXHR9XHJcblxyXG5cdF9idWlsZFByb3BlcnR5TWFwKCk7XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKHN0YXRlLCBLZXlQYXRoTm9kZShzdGF0ZSksIG1ldGhvZHMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IExheWVyQmFzZTsiLCJ2YXIgbGF5ZXJfdHlwZXMgPSByZXF1aXJlKCcuLi9lbnVtcy9sYXllcl90eXBlcycpO1xyXG52YXIgbGF5ZXJfYXBpID0gcmVxdWlyZSgnLi4vaGVscGVycy9sYXllckFQSUJ1aWxkZXInKTtcclxuXHJcbmZ1bmN0aW9uIExheWVyTGlzdChlbGVtZW50cykge1xyXG5cclxuXHRmdW5jdGlvbiBfZ2V0TGVuZ3RoKCkge1xyXG5cdFx0cmV0dXJuIGVsZW1lbnRzLmxlbmd0aDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIF9maWx0ZXJMYXllckJ5VHlwZShlbGVtZW50cywgdHlwZSkge1xyXG5cdFx0cmV0dXJuIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XHJcblx0XHRcdHJldHVybiBlbGVtZW50LmRhdGEudHkgPT09IGxheWVyX3R5cGVzW3R5cGVdO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfZmlsdGVyTGF5ZXJCeU5hbWUoZWxlbWVudHMsIG5hbWUpIHtcclxuXHRcdHJldHVybiBlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbWVudC5kYXRhLm5tID09PSBuYW1lO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRMYXllcnMoKSB7XHJcblx0XHQgcmV0dXJuIExheWVyTGlzdChlbGVtZW50cyk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRMYXllcnNCeVR5cGUodHlwZSkge1xyXG5cdFx0dmFyIGVsZW1lbnRzTGlzdCA9IF9maWx0ZXJMYXllckJ5VHlwZShlbGVtZW50cywgdHlwZSk7XHJcblx0XHRyZXR1cm4gTGF5ZXJMaXN0KGVsZW1lbnRzTGlzdCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRMYXllcnNCeU5hbWUodHlwZSkge1xyXG5cdFx0dmFyIGVsZW1lbnRzTGlzdCA9IF9maWx0ZXJMYXllckJ5TmFtZShlbGVtZW50cywgdHlwZSk7XHJcblx0XHRyZXR1cm4gTGF5ZXJMaXN0KGVsZW1lbnRzTGlzdCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBsYXllcihpbmRleCkge1xyXG5cdFx0aWYgKGluZGV4ID49IGVsZW1lbnRzLmxlbmd0aCkge1xyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGF5ZXJfYXBpKGVsZW1lbnRzW3BhcnNlSW50KGluZGV4KV0pO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYWRkSXRlcmF0YWJsZU1ldGhvZHMoaXRlcmF0YWJsZU1ldGhvZHMsIGxpc3QpIHtcclxuXHRcdGl0ZXJhdGFibGVNZXRob2RzLnJlZHVjZShmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUpe1xyXG5cdFx0XHR2YXIgX3ZhbHVlID0gdmFsdWU7XHJcblx0XHRcdGFjY3VtdWxhdG9yW3ZhbHVlXSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhciBfYXJndW1lbnRzID0gYXJndW1lbnRzO1xyXG5cdFx0XHRcdHJldHVybiBlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWxlbWVudCl7XHJcblx0XHRcdFx0XHR2YXIgbGF5ZXIgPSBsYXllcl9hcGkoZWxlbWVudCk7XHJcblx0XHRcdFx0XHRpZihsYXllcltfdmFsdWVdKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBsYXllcltfdmFsdWVdLmFwcGx5KG51bGwsIF9hcmd1bWVudHMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xyXG5cdFx0fSwgbWV0aG9kcyk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRUYXJnZXRFbGVtZW50cygpIHtcclxuXHRcdHJldHVybiBlbGVtZW50cztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNvbmNhdChsaXN0KSB7XHJcblx0XHRyZXR1cm4gZWxlbWVudHMuY29uY2F0KGxpc3QuZ2V0VGFyZ2V0RWxlbWVudHMoKSk7XHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHRcdGdldExheWVyczogZ2V0TGF5ZXJzLFxyXG5cdFx0Z2V0TGF5ZXJzQnlUeXBlOiBnZXRMYXllcnNCeVR5cGUsXHJcblx0XHRnZXRMYXllcnNCeU5hbWU6IGdldExheWVyc0J5TmFtZSxcclxuXHRcdGxheWVyOiBsYXllcixcclxuXHRcdGNvbmNhdDogY29uY2F0LFxyXG5cdFx0Z2V0VGFyZ2V0RWxlbWVudHM6IGdldFRhcmdldEVsZW1lbnRzXHJcblx0fTtcclxuXHJcblx0YWRkSXRlcmF0YWJsZU1ldGhvZHMoWydzZXRUcmFuc2xhdGUnLCAnZ2V0VHlwZScsICdnZXREdXJhdGlvbiddKTtcclxuXHRhZGRJdGVyYXRhYmxlTWV0aG9kcyhbJ3NldFRleHQnLCAnZ2V0VGV4dCcsICdzZXREb2N1bWVudERhdGEnLCAnY2FuUmVzaXplRm9udCcsICdzZXRNaW5pbXVtRm9udFNpemUnXSk7XHJcblxyXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRob2RzLCAnbGVuZ3RoJywge1xyXG5cdFx0Z2V0OiBfZ2V0TGVuZ3RoXHJcblx0fSk7XHJcblx0cmV0dXJuIG1ldGhvZHM7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTGF5ZXJMaXN0OyIsInZhciBLZXlQYXRoTm9kZSA9IHJlcXVpcmUoJy4uLy4uL2tleV9wYXRoL0tleVBhdGhOb2RlJyk7XHJcbnZhciBQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uLy4uL3Byb3BlcnR5L1Byb3BlcnR5Jyk7XHJcblxyXG5mdW5jdGlvbiBDYW1lcmEoZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBpbnN0YW5jZSA9IHt9O1xyXG5cclxuXHR2YXIgc3RhdGUgPSB7XHJcblx0XHRlbGVtZW50OiBlbGVtZW50LFxyXG5cdFx0cGFyZW50OiBwYXJlbnQsXHJcblx0XHRwcm9wZXJ0aWVzOiBfYnVpbGRQcm9wZXJ0eU1hcCgpXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfYnVpbGRQcm9wZXJ0eU1hcCgpIHtcclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnUG9pbnQgb2YgSW50ZXJlc3QnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LmEsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdab29tJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5wZSwgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1Bvc2l0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5wLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnWCBSb3RhdGlvbicsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQucngsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdZIFJvdGF0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5yeSwgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1ogUm90YXRpb24nLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LnJ6LCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnT3JpZW50YXRpb24nLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50Lm9yLCBwYXJlbnQpXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldFRhcmdldExheWVyKCkge1xyXG5cdFx0cmV0dXJuIHN0YXRlLmVsZW1lbnQ7XHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHRcdGdldFRhcmdldExheWVyOiBnZXRUYXJnZXRMYXllclxyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oaW5zdGFuY2UsIEtleVBhdGhOb2RlKHN0YXRlKSwgbWV0aG9kcyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ2FtZXJhOyIsInZhciBLZXlQYXRoTGlzdCA9IHJlcXVpcmUoJy4uLy4uL2tleV9wYXRoL0tleVBhdGhMaXN0Jyk7XHJcbnZhciBMYXllckJhc2UgPSByZXF1aXJlKCcuLi9MYXllckJhc2UnKTtcclxudmFyIGxheWVyX2FwaSA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlcnMvbGF5ZXJBUElCdWlsZGVyJyk7XHJcbnZhciBQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uLy4uL3Byb3BlcnR5L1Byb3BlcnR5Jyk7XHJcbnZhciBUaW1lUmVtYXAgPSByZXF1aXJlKCcuL1RpbWVSZW1hcCcpO1xyXG5cclxuZnVuY3Rpb24gQ29tcG9zaXRpb24oZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBpbnN0YW5jZSA9IHt9O1xyXG5cclxuXHR2YXIgc3RhdGUgPSB7XHJcblx0XHRlbGVtZW50OiBlbGVtZW50LFxyXG5cdFx0cGFyZW50OiBwYXJlbnQsXHJcblx0XHRwcm9wZXJ0aWVzOiBfYnVpbGRQcm9wZXJ0eU1hcCgpXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBidWlsZExheWVyQXBpKGxheWVyLCBpbmRleCkge1xyXG5cdFx0dmFyIF9sYXllckFwaSA9IG51bGw7XHJcblx0XHR2YXIgb2IgPSB7XHJcblx0XHRcdG5hbWU6IGxheWVyLm5tXHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gZ2V0TGF5ZXJBcGkoKSB7XHJcblx0XHRcdGlmKCFfbGF5ZXJBcGkpIHtcclxuXHRcdFx0XHRfbGF5ZXJBcGkgPSBsYXllcl9hcGkoZWxlbWVudC5lbGVtZW50c1tpbmRleF0sIHN0YXRlKVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBfbGF5ZXJBcGlcclxuXHRcdH1cclxuXHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2IsICd2YWx1ZScsIHtcclxuXHRcdFx0Z2V0IDogZ2V0TGF5ZXJBcGlcclxuXHRcdH0pXHJcblx0XHRyZXR1cm4gb2I7XHJcblx0fVxyXG5cclxuXHRcclxuXHRmdW5jdGlvbiBfYnVpbGRQcm9wZXJ0eU1hcCgpIHtcclxuXHRcdHZhciBjb21wb3NpdGlvbkxheWVycyA9IGVsZW1lbnQubGF5ZXJzLm1hcChidWlsZExheWVyQXBpKVxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdUaW1lIFJlbWFwJyxcclxuXHRcdFx0XHR2YWx1ZTogVGltZVJlbWFwKGVsZW1lbnQudG0pXHJcblx0XHRcdH1cclxuXHRcdF0uY29uY2F0KGNvbXBvc2l0aW9uTGF5ZXJzKVxyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihpbnN0YW5jZSwgTGF5ZXJCYXNlKHN0YXRlKSwgS2V5UGF0aExpc3Qoc3RhdGUuZWxlbWVudHMsICdsYXllcicpLCBtZXRob2RzKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDb21wb3NpdGlvbjsiLCJ2YXIgS2V5UGF0aE5vZGUgPSByZXF1aXJlKCcuLi8uLi9rZXlfcGF0aC9LZXlQYXRoTm9kZScpO1xyXG52YXIgVmFsdWVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uLy4uL3Byb3BlcnR5L1ZhbHVlUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIFRpbWVSZW1hcChwcm9wZXJ0eSwgcGFyZW50KSB7XHJcblx0dmFyIHN0YXRlID0ge1xyXG5cdFx0cHJvcGVydHk6IHByb3BlcnR5LFxyXG5cdFx0cGFyZW50OiBwYXJlbnRcclxuXHR9XHJcblxyXG5cdHZhciBfaXNDYWxsYmFja0FkZGVkID0gZmFsc2U7XHJcblx0dmFyIGN1cnJlbnRTZWdtZW50SW5pdCA9IDA7XHJcblx0dmFyIGN1cnJlbnRTZWdtZW50RW5kID0gMDtcclxuXHR2YXIgcHJldmlvdXNUaW1lID0gMCwgY3VycmVudFRpbWUgPSAwO1xyXG5cdHZhciBpbml0VGltZSA9IDA7XHJcblx0dmFyIF9sb29wID0gdHJ1ZTtcclxuXHR2YXIgX2xvb3BDb3VudCA9IDA7XHJcblx0dmFyIF9zcGVlZCA9IDE7XHJcblx0dmFyIF9wYXVzZWQgPSBmYWxzZTtcclxuXHR2YXIgX2lzRGVidWdnaW5nID0gZmFsc2U7XHJcblx0dmFyIHF1ZXVlZFNlZ21lbnRzID0gW107XHJcblx0dmFyIF9kZXN0cm95RnVuY3Rpb247XHJcblx0dmFyIGVudGVyRnJhbWVDYWxsYmFjayA9IG51bGw7XHJcblx0dmFyIGVudGVyRnJhbWVFdmVudCA9IHtcclxuXHRcdHRpbWU6IC0xXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwbGF5U2VnbWVudChpbml0LCBlbmQsIGNsZWFyKSB7XHJcblx0XHRfcGF1c2VkID0gZmFsc2U7XHJcblx0XHRpZihjbGVhcikge1xyXG5cdFx0XHRjbGVhclF1ZXVlKCk7XHJcblx0XHRcdGN1cnJlbnRUaW1lID0gaW5pdDtcclxuXHRcdH1cclxuXHRcdGlmKF9pc0RlYnVnZ2luZykge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhpbml0LCBlbmQpO1xyXG5cdFx0fVxyXG5cdFx0X2xvb3BDb3VudCA9IDA7XHJcblx0XHRwcmV2aW91c1RpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0Y3VycmVudFNlZ21lbnRJbml0ID0gaW5pdDtcclxuXHRcdGN1cnJlbnRTZWdtZW50RW5kID0gZW5kO1xyXG5cdFx0YWRkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBsYXlRdWV1ZWRTZWdtZW50KCkge1xyXG5cdFx0dmFyIG5ld1NlZ21lbnQgPSBxdWV1ZWRTZWdtZW50cy5zaGlmdCgpO1xyXG5cdFx0cGxheVNlZ21lbnQobmV3U2VnbWVudFswXSwgbmV3U2VnbWVudFsxXSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBxdWV1ZVNlZ21lbnQoaW5pdCwgZW5kKSB7XHJcblx0XHRxdWV1ZWRTZWdtZW50cy5wdXNoKFtpbml0LCBlbmRdKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNsZWFyUXVldWUoKSB7XHJcblx0XHRxdWV1ZWRTZWdtZW50cy5sZW5ndGggPSAwO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX3NlZ21lbnRQbGF5ZXIoY3VycmVudFZhbHVlKSB7XHJcblx0XHRpZihjdXJyZW50U2VnbWVudEluaXQgPT09IGN1cnJlbnRTZWdtZW50RW5kKSB7XHJcblx0XHRcdGN1cnJlbnRUaW1lID0gY3VycmVudFNlZ21lbnRJbml0O1xyXG5cdFx0fSBlbHNlIGlmKCFfcGF1c2VkKSB7XHJcblx0XHRcdHZhciBub3dUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0dmFyIGVsYXBzZWRUaW1lID0gX3NwZWVkICogKG5vd1RpbWUgLSBwcmV2aW91c1RpbWUpIC8gMTAwMDtcclxuXHRcdFx0cHJldmlvdXNUaW1lID0gbm93VGltZTtcclxuXHRcdFx0aWYoY3VycmVudFNlZ21lbnRJbml0IDwgY3VycmVudFNlZ21lbnRFbmQpIHtcclxuXHRcdFx0XHRjdXJyZW50VGltZSArPSBlbGFwc2VkVGltZTtcclxuXHRcdFx0XHRpZihjdXJyZW50VGltZSA+IGN1cnJlbnRTZWdtZW50RW5kKSB7XHJcblx0XHRcdFx0XHRfbG9vcENvdW50ICs9IDE7XHJcblx0XHRcdFx0XHRpZihxdWV1ZWRTZWdtZW50cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0cGxheVF1ZXVlZFNlZ21lbnQoKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZighX2xvb3ApIHtcclxuXHRcdFx0XHRcdFx0Y3VycmVudFRpbWUgPSBjdXJyZW50U2VnbWVudEVuZDtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qY3VycmVudFRpbWUgLT0gTWF0aC5mbG9vcihjdXJyZW50VGltZSAvIChjdXJyZW50U2VnbWVudEVuZCAtIGN1cnJlbnRTZWdtZW50SW5pdCkpICogKGN1cnJlbnRTZWdtZW50RW5kIC0gY3VycmVudFNlZ21lbnRJbml0KTtcclxuXHRcdFx0XHRcdFx0Y3VycmVudFRpbWUgPSBjdXJyZW50U2VnbWVudEluaXQgKyBjdXJyZW50VGltZTsqL1xyXG5cdFx0XHRcdFx0XHRjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lICUgKGN1cnJlbnRTZWdtZW50RW5kIC0gY3VycmVudFNlZ21lbnRJbml0KTtcclxuXHRcdFx0XHRcdFx0Ly9jdXJyZW50VGltZSA9IGN1cnJlbnRTZWdtZW50SW5pdCArIChjdXJyZW50VGltZSk7XHJcblx0XHRcdFx0XHRcdC8vY3VycmVudFRpbWUgPSBjdXJyZW50U2VnbWVudEluaXQgKyAoY3VycmVudFRpbWUgLSBjdXJyZW50U2VnbWVudEVuZCk7XHJcblx0XHRcdFx0XHRcdCAvL2NvbnNvbGUubG9nKCdDVDogJywgY3VycmVudFRpbWUpIFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjdXJyZW50VGltZSAtPSBlbGFwc2VkVGltZTtcclxuXHRcdFx0XHRpZihjdXJyZW50VGltZSA8IGN1cnJlbnRTZWdtZW50RW5kKSB7XHJcblx0XHRcdFx0XHRfbG9vcENvdW50ICs9IDE7XHJcblx0XHRcdFx0XHRpZihxdWV1ZWRTZWdtZW50cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0cGxheVF1ZXVlZFNlZ21lbnQoKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZighX2xvb3ApIHtcclxuXHRcdFx0XHRcdFx0Y3VycmVudFRpbWUgPSBjdXJyZW50U2VnbWVudEVuZDtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGN1cnJlbnRUaW1lID0gY3VycmVudFNlZ21lbnRJbml0IC0gKGN1cnJlbnRTZWdtZW50RW5kIC0gY3VycmVudFRpbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZihfaXNEZWJ1Z2dpbmcpIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhjdXJyZW50VGltZSlcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYoaW5zdGFuY2Uub25FbnRlckZyYW1lICYmIGVudGVyRnJhbWVFdmVudC50aW1lICE9PSBjdXJyZW50VGltZSkge1xyXG5cdFx0XHRlbnRlckZyYW1lRXZlbnQudGltZSA9IGN1cnJlbnRUaW1lO1xyXG5cdFx0XHRpbnN0YW5jZS5vbkVudGVyRnJhbWUoZW50ZXJGcmFtZUV2ZW50KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBjdXJyZW50VGltZTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGFkZENhbGxiYWNrKCkge1xyXG5cdFx0aWYoIV9pc0NhbGxiYWNrQWRkZWQpIHtcclxuXHRcdFx0X2lzQ2FsbGJhY2tBZGRlZCA9IHRydWU7XHJcblx0XHRcdF9kZXN0cm95RnVuY3Rpb24gPSBpbnN0YW5jZS5zZXRWYWx1ZShfc2VnbWVudFBsYXllciwgX2lzRGVidWdnaW5nKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcGxheVRvKGVuZCwgY2xlYXIpIHtcclxuXHRcdF9wYXVzZWQgPSBmYWxzZTtcclxuXHRcdGlmKGNsZWFyKSB7XHJcblx0XHRcdGNsZWFyUXVldWUoKTtcclxuXHRcdH1cclxuXHRcdGFkZENhbGxiYWNrKCk7XHJcblx0XHRjdXJyZW50U2VnbWVudEVuZCA9IGVuZDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldEN1cnJlbnRUaW1lKCkge1xyXG5cdFx0aWYoX2lzQ2FsbGJhY2tBZGRlZCkge1xyXG5cdFx0XHRyZXR1cm4gY3VycmVudFRpbWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gcHJvcGVydHkudiAvIHByb3BlcnR5Lm11bHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRMb29wKGZsYWcpIHtcclxuXHRcdF9sb29wID0gZmxhZztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldFNwZWVkKHZhbHVlKSB7XHJcblx0XHRfc3BlZWQgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldERlYnVnZ2luZyhmbGFnKSB7XHJcblx0XHRfaXNEZWJ1Z2dpbmcgPSBmbGFnO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcGF1c2UoKSB7XHJcblx0XHRfcGF1c2VkID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XHJcblx0XHRpZihfZGVzdHJveUZ1bmN0aW9uKSB7XHJcblx0XHRcdF9kZXN0cm95RnVuY3Rpb24oKTtcclxuXHRcdFx0c3RhdGUucHJvcGVydHkgPSBudWxsO1xyXG5cdFx0XHRzdGF0ZS5wYXJlbnQgPSBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0XHRwbGF5U2VnbWVudDogcGxheVNlZ21lbnQsXHJcblx0XHRwbGF5VG86IHBsYXlUbyxcclxuXHRcdHF1ZXVlU2VnbWVudDogcXVldWVTZWdtZW50LFxyXG5cdFx0Y2xlYXJRdWV1ZTogY2xlYXJRdWV1ZSxcclxuXHRcdHNldExvb3A6IHNldExvb3AsXHJcblx0XHRzZXRTcGVlZDogc2V0U3BlZWQsXHJcblx0XHRwYXVzZTogcGF1c2UsXHJcblx0XHRzZXREZWJ1Z2dpbmc6IHNldERlYnVnZ2luZyxcclxuXHRcdGdldEN1cnJlbnRUaW1lOiBnZXRDdXJyZW50VGltZSxcclxuXHRcdG9uRW50ZXJGcmFtZTogbnVsbCxcclxuXHRcdGRlc3Ryb3k6IGRlc3Ryb3lcclxuXHR9XHJcblxyXG5cdHZhciBpbnN0YW5jZSA9IHt9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKGluc3RhbmNlLCBtZXRob2RzLCBWYWx1ZVByb3BlcnR5KHN0YXRlKSwgS2V5UGF0aE5vZGUoc3RhdGUpKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUaW1lUmVtYXA7IiwidmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIEVmZmVjdEVsZW1lbnQoZWZmZWN0LCBwYXJlbnQpIHtcclxuXHJcblx0cmV0dXJuIFByb3BlcnR5KGVmZmVjdC5wLCBwYXJlbnQpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVmZmVjdEVsZW1lbnQ7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxudmFyIEVmZmVjdEVsZW1lbnQgPSByZXF1aXJlKCcuL0VmZmVjdEVsZW1lbnQnKTtcclxuXHJcbmZ1bmN0aW9uIEVmZmVjdHMoZWZmZWN0cywgcGFyZW50KSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogYnVpbGRQcm9wZXJ0aWVzKClcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldFZhbHVlKGVmZmVjdERhdGEsIGluZGV4KSB7XHJcblx0XHR2YXIgbm0gPSBlZmZlY3REYXRhLmRhdGEgPyBlZmZlY3REYXRhLmRhdGEubm0gOiBpbmRleC50b1N0cmluZygpO1xyXG5cdFx0dmFyIGVmZmVjdEVsZW1lbnQgPSBlZmZlY3REYXRhLmRhdGEgPyBFZmZlY3RzKGVmZmVjdERhdGEuZWZmZWN0RWxlbWVudHMsIHBhcmVudCkgOiBQcm9wZXJ0eShlZmZlY3REYXRhLnAsIHBhcmVudCk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRuYW1lOiBubSxcclxuXHRcdFx0dmFsdWU6IGVmZmVjdEVsZW1lbnRcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGJ1aWxkUHJvcGVydGllcygpIHtcclxuXHRcdHZhciBpLCBsZW4gPSBlZmZlY3RzLmxlbmd0aDtcclxuXHRcdHZhciBhcnIgPSBbXTtcclxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xyXG5cdFx0XHRhcnIucHVzaChnZXRWYWx1ZShlZmZlY3RzW2ldLCBpKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYXJyO1xyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihtZXRob2RzLCBLZXlQYXRoTm9kZShzdGF0ZSkpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVmZmVjdHM7IiwidmFyIExheWVyQmFzZSA9IHJlcXVpcmUoJy4uL0xheWVyQmFzZScpO1xyXG5cclxuZnVuY3Rpb24gSW1hZ2UoZWxlbWVudCkge1xyXG5cclxuXHR2YXIgc3RhdGUgPSB7XHJcblx0XHRlbGVtZW50OiBlbGVtZW50LFxyXG5cdFx0cGFyZW50OiBwYXJlbnQsXHJcblx0XHRwcm9wZXJ0aWVzOiBfYnVpbGRQcm9wZXJ0eU1hcCgpXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfYnVpbGRQcm9wZXJ0eU1hcCgpIHtcclxuXHRcdHJldHVybiBbXHJcblx0XHRdXHJcblx0fVxyXG5cdFxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIExheWVyQmFzZShzdGF0ZSksIG1ldGhvZHMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEltYWdlOyIsInZhciBMYXllckJhc2UgPSByZXF1aXJlKCcuLi9MYXllckJhc2UnKTtcclxuXHJcbmZ1bmN0aW9uIE51bGxFbGVtZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG5cclxuXHR2YXIgaW5zdGFuY2UgPSB7fTtcclxuXHJcblx0dmFyIHN0YXRlID0ge1xyXG5cdFx0ZWxlbWVudDogZWxlbWVudCxcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XVxyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihpbnN0YW5jZSwgTGF5ZXJCYXNlKHN0YXRlKSwgbWV0aG9kcyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gTnVsbEVsZW1lbnQ7IiwidmFyIExheWVyQmFzZSA9IHJlcXVpcmUoJy4uL0xheWVyQmFzZScpO1xyXG52YXIgU2hhcGVDb250ZW50cyA9IHJlcXVpcmUoJy4vU2hhcGVDb250ZW50cycpO1xyXG5cclxuZnVuY3Rpb24gU2hhcGUoZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHByb3BlcnRpZXM6IFtdLFxyXG5cdFx0cGFyZW50OiBwYXJlbnQsXHJcblx0XHRlbGVtZW50OiBlbGVtZW50XHJcblx0fVxyXG5cdHZhciBzaGFwZUNvbnRlbnRzID0gU2hhcGVDb250ZW50cyhlbGVtZW50LmRhdGEuc2hhcGVzLCBlbGVtZW50Lml0ZW1zRGF0YSwgc3RhdGUpO1xyXG5cclxuXHRcclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRzdGF0ZS5wcm9wZXJ0aWVzLnB1c2goXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnQ29udGVudHMnLFxyXG5cdFx0XHRcdHZhbHVlOiBzaGFwZUNvbnRlbnRzXHJcblx0XHRcdH1cclxuXHRcdClcclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdH1cclxuXHJcblx0X2J1aWxkUHJvcGVydHlNYXAoKTtcclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oc3RhdGUsIExheWVyQmFzZShzdGF0ZSksIG1ldGhvZHMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNoYXBlOyIsInZhciBLZXlQYXRoTm9kZSA9IHJlcXVpcmUoJy4uLy4uL2tleV9wYXRoL0tleVBhdGhOb2RlJyk7XHJcbnZhciBQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uLy4uL3Byb3BlcnR5L1Byb3BlcnR5Jyk7XHJcbnZhciBTaGFwZVJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vU2hhcGVSZWN0YW5nbGUnKTtcclxudmFyIFNoYXBlRmlsbCA9IHJlcXVpcmUoJy4vU2hhcGVGaWxsJyk7XHJcbnZhciBTaGFwZVN0cm9rZSA9IHJlcXVpcmUoJy4vU2hhcGVTdHJva2UnKTtcclxudmFyIFNoYXBlRWxsaXBzZSA9IHJlcXVpcmUoJy4vU2hhcGVFbGxpcHNlJyk7XHJcbnZhciBTaGFwZUdyYWRpZW50RmlsbCA9IHJlcXVpcmUoJy4vU2hhcGVHcmFkaWVudEZpbGwnKTtcclxudmFyIFNoYXBlR3JhZGllbnRTdHJva2UgPSByZXF1aXJlKCcuL1NoYXBlR3JhZGllbnRTdHJva2UnKTtcclxudmFyIFNoYXBlVHJpbVBhdGhzID0gcmVxdWlyZSgnLi9TaGFwZVRyaW1QYXRocycpO1xyXG52YXIgU2hhcGVSZXBlYXRlciA9IHJlcXVpcmUoJy4vU2hhcGVSZXBlYXRlcicpO1xyXG52YXIgU2hhcGVQb2x5c3RhciA9IHJlcXVpcmUoJy4vU2hhcGVQb2x5c3RhcicpO1xyXG52YXIgU2hhcGVSb3VuZENvcm5lcnMgPSByZXF1aXJlKCcuL1NoYXBlUm91bmRDb3JuZXJzJyk7XHJcbnZhciBTaGFwZVBhdGggPSByZXF1aXJlKCcuL1NoYXBlUGF0aCcpO1xyXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi4vdHJhbnNmb3JtL1RyYW5zZm9ybScpO1xyXG52YXIgTWF0cml4ID0gcmVxdWlyZSgnLi4vLi4vaGVscGVycy90cmFuc2Zvcm1hdGlvbk1hdHJpeCcpO1xyXG5cclxuZnVuY3Rpb24gU2hhcGVDb250ZW50cyhzaGFwZXNEYXRhLCBzaGFwZXMsIHBhcmVudCkge1xyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHByb3BlcnRpZXM6IF9idWlsZFByb3BlcnR5TWFwKCksXHJcblx0XHRwYXJlbnQ6IHBhcmVudFxyXG5cdH1cclxuXHJcblx0dmFyIGNhY2hlZFNoYXBlUHJvcGVydGllcyA9IFtdO1xyXG5cclxuXHRmdW5jdGlvbiBidWlsZFNoYXBlT2JqZWN0KHNoYXBlLCBpbmRleCkge1xyXG5cdFx0dmFyIG9iID0ge1xyXG5cdFx0XHRuYW1lOiBzaGFwZS5ubVxyXG5cdFx0fVxyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iLCAndmFsdWUnLCB7XHJcblx0XHQgICBnZXQoKSB7XHJcblx0XHQgICBcdGlmKGNhY2hlZFNoYXBlUHJvcGVydGllc1tpbmRleF0pIHtcclxuXHRcdCAgIFx0XHRyZXR1cm4gY2FjaGVkU2hhcGVQcm9wZXJ0aWVzW2luZGV4XTtcclxuXHRcdCAgIFx0fSBlbHNlIHtcclxuXHRcdCAgIFx0XHR2YXIgcHJvcGVydHk7XHJcblx0XHQgICBcdH1cclxuXHQgICBcdFx0aWYoc2hhcGUudHkgPT09ICdncicpIHtcclxuXHQgICBcdFx0XHRwcm9wZXJ0eSA9IFNoYXBlQ29udGVudHMoc2hhcGVzRGF0YVtpbmRleF0uaXQsIHNoYXBlc1tpbmRleF0uaXQsIHN0YXRlKTtcclxuXHQgICBcdFx0fSBlbHNlIGlmKHNoYXBlLnR5ID09PSAncmMnKSB7XHJcblx0ICAgXHRcdFx0cHJvcGVydHkgPSBTaGFwZVJlY3RhbmdsZShzaGFwZXNbaW5kZXhdLCBzdGF0ZSk7XHJcblx0ICAgXHRcdH0gZWxzZSBpZihzaGFwZS50eSA9PT0gJ2VsJykge1xyXG5cdCAgIFx0XHRcdHByb3BlcnR5ID0gU2hhcGVFbGxpcHNlKHNoYXBlc1tpbmRleF0sIHN0YXRlKTtcclxuXHQgICBcdFx0fSBlbHNlIGlmKHNoYXBlLnR5ID09PSAnZmwnKSB7XHJcblx0ICAgXHRcdFx0cHJvcGVydHkgPSBTaGFwZUZpbGwoc2hhcGVzW2luZGV4XSwgc3RhdGUpO1xyXG5cdCAgIFx0XHR9IGVsc2UgaWYoc2hhcGUudHkgPT09ICdzdCcpIHtcclxuXHQgICBcdFx0XHRwcm9wZXJ0eSA9IFNoYXBlU3Ryb2tlKHNoYXBlc1tpbmRleF0sIHN0YXRlKTtcclxuXHQgICBcdFx0fSBlbHNlIGlmKHNoYXBlLnR5ID09PSAnZ2YnKSB7XHJcblx0ICAgXHRcdFx0cHJvcGVydHkgPSBTaGFwZUdyYWRpZW50RmlsbChzaGFwZXNbaW5kZXhdLCBzdGF0ZSk7XHJcblx0ICAgXHRcdH0gZWxzZSBpZihzaGFwZS50eSA9PT0gJ2dzJykge1xyXG5cdCAgIFx0XHRcdHByb3BlcnR5ID0gU2hhcGVHcmFkaWVudFN0cm9rZShzaGFwZXNbaW5kZXhdLCBzdGF0ZSk7XHJcblx0ICAgXHRcdH0gZWxzZSBpZihzaGFwZS50eSA9PT0gJ3RtJykge1xyXG5cdCAgIFx0XHRcdHByb3BlcnR5ID0gU2hhcGVUcmltUGF0aHMoc2hhcGVzW2luZGV4XSwgc3RhdGUpO1xyXG5cdCAgIFx0XHR9IGVsc2UgaWYoc2hhcGUudHkgPT09ICdycCcpIHtcclxuXHQgICBcdFx0XHRwcm9wZXJ0eSA9IFNoYXBlUmVwZWF0ZXIoc2hhcGVzW2luZGV4XSwgc3RhdGUpO1xyXG5cdCAgIFx0XHR9IGVsc2UgaWYoc2hhcGUudHkgPT09ICdzcicpIHtcclxuXHQgICBcdFx0XHRwcm9wZXJ0eSA9IFNoYXBlUG9seXN0YXIoc2hhcGVzW2luZGV4XSwgc3RhdGUpO1xyXG5cdCAgIFx0XHR9IGVsc2UgaWYoc2hhcGUudHkgPT09ICdyZCcpIHtcclxuXHQgICBcdFx0XHRwcm9wZXJ0eSA9IFNoYXBlUm91bmRDb3JuZXJzKHNoYXBlc1tpbmRleF0sIHN0YXRlKTtcclxuXHQgICBcdFx0fSBlbHNlIGlmKHNoYXBlLnR5ID09PSAnc2gnKSB7XHJcblx0ICAgXHRcdFx0cHJvcGVydHkgPSBTaGFwZVBhdGgoc2hhcGVzW2luZGV4XSwgc3RhdGUpO1xyXG5cdCAgIFx0XHR9IGVsc2UgaWYoc2hhcGUudHkgPT09ICd0cicpIHtcclxuXHQgICBcdFx0XHRwcm9wZXJ0eSA9IFRyYW5zZm9ybShzaGFwZXNbaW5kZXhdLnRyYW5zZm9ybS5tUHJvcHMsIHN0YXRlKTtcclxuXHQgICBcdFx0fSBlbHNlIHtcclxuXHQgICBcdFx0XHRjb25zb2xlLmxvZyhzaGFwZS50eSk7XHJcblx0ICAgXHRcdH1cclxuXHQgICBcdFx0Y2FjaGVkU2hhcGVQcm9wZXJ0aWVzW2luZGV4XSA9IHByb3BlcnR5O1xyXG5cdCAgIFx0XHRyZXR1cm4gcHJvcGVydHk7XHJcblx0XHQgICB9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBvYlxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gc2hhcGVzRGF0YS5tYXAoZnVuY3Rpb24oc2hhcGUsIGluZGV4KSB7XHJcblx0XHRcdHJldHVybiBidWlsZFNoYXBlT2JqZWN0KHNoYXBlLCBpbmRleClcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZnJvbUtleXBhdGhMYXllclBvaW50KHBvaW50KSB7XHJcblx0XHRpZihzdGF0ZS5oYXNQcm9wZXJ0eSgnVHJhbnNmb3JtJykpIHtcclxuICAgIFx0XHR2YXIgdG9Xb3JsZE1hdCA9IE1hdHJpeCgpO1xyXG4gICAgICAgIFx0dmFyIHRyYW5zZm9ybU1hdCA9IHN0YXRlLmdldFByb3BlcnR5KCdUcmFuc2Zvcm0nKS5nZXRUYXJnZXRUcmFuc2Zvcm0oKTtcclxuXHRcdFx0dHJhbnNmb3JtTWF0LmFwcGx5VG9NYXRyaXgodG9Xb3JsZE1hdCk7XHJcbiAgICAgICAgXHRwb2ludCA9IHRvV29ybGRNYXQuYXBwbHlUb1BvaW50QXJyYXkocG9pbnRbMF0scG9pbnRbMV0scG9pbnRbMl18fDApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHN0YXRlLnBhcmVudC5mcm9tS2V5cGF0aExheWVyUG9pbnQocG9pbnQpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gdG9LZXlwYXRoTGF5ZXJQb2ludChwb2ludCkge1xyXG5cdFx0cG9pbnQgPSBzdGF0ZS5wYXJlbnQudG9LZXlwYXRoTGF5ZXJQb2ludChwb2ludCk7XHJcblx0XHRpZihzdGF0ZS5oYXNQcm9wZXJ0eSgnVHJhbnNmb3JtJykpIHtcclxuICAgIFx0XHR2YXIgdG9Xb3JsZE1hdCA9IE1hdHJpeCgpO1xyXG4gICAgICAgIFx0dmFyIHRyYW5zZm9ybU1hdCA9IHN0YXRlLmdldFByb3BlcnR5KCdUcmFuc2Zvcm0nKS5nZXRUYXJnZXRUcmFuc2Zvcm0oKTtcclxuXHRcdFx0dHJhbnNmb3JtTWF0LmFwcGx5VG9NYXRyaXgodG9Xb3JsZE1hdCk7XHJcbiAgICAgICAgXHRwb2ludCA9IHRvV29ybGRNYXQuaW52ZXJzZVBvaW50KHBvaW50KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBwb2ludDtcclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdFx0ZnJvbUtleXBhdGhMYXllclBvaW50OiBmcm9tS2V5cGF0aExheWVyUG9pbnQsXHJcblx0XHR0b0tleXBhdGhMYXllclBvaW50OiB0b0tleXBhdGhMYXllclBvaW50XHJcblx0fVxyXG5cclxuXHQvL3N0YXRlLnByb3BlcnRpZXMgPSBfYnVpbGRQcm9wZXJ0eU1hcCgpO1xyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihzdGF0ZSwgS2V5UGF0aE5vZGUoc3RhdGUpLCBtZXRob2RzKVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNoYXBlQ29udGVudHM7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIFNoYXBlRWxsaXBzZShlbGVtZW50LCBwYXJlbnQpIHtcclxuXHJcblx0dmFyIHN0YXRlID0ge1xyXG5cdFx0cGFyZW50OiBwYXJlbnQsXHJcblx0XHRwcm9wZXJ0aWVzOiBfYnVpbGRQcm9wZXJ0eU1hcCgpXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfYnVpbGRQcm9wZXJ0eU1hcCgpIHtcclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnU2l6ZScsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQuc2gucywgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1Bvc2l0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5zaC5wLCBwYXJlbnQpXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obWV0aG9kcywgS2V5UGF0aE5vZGUoc3RhdGUpKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaGFwZUVsbGlwc2U7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIFNoYXBlRmlsbChlbGVtZW50LCBwYXJlbnQpIHtcclxuXHJcblx0dmFyIHN0YXRlID0ge1xyXG5cdFx0cGFyZW50OiBwYXJlbnQsXHJcblx0XHRwcm9wZXJ0aWVzOiBfYnVpbGRQcm9wZXJ0eU1hcCgpXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfYnVpbGRQcm9wZXJ0eU1hcCgpIHtcclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnQ29sb3InLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LmMsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdPcGFjaXR5JyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IFByb3BlcnR5KGVsZW1lbnQubywgcGFyZW50KVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XVxyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihtZXRob2RzLCBLZXlQYXRoTm9kZShzdGF0ZSkpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNoYXBlRmlsbDsiLCJ2YXIgS2V5UGF0aE5vZGUgPSByZXF1aXJlKCcuLi8uLi9rZXlfcGF0aC9LZXlQYXRoTm9kZScpO1xyXG52YXIgUHJvcGVydHkgPSByZXF1aXJlKCcuLi8uLi9wcm9wZXJ0eS9Qcm9wZXJ0eScpO1xyXG5cclxuZnVuY3Rpb24gU2hhcGVHcmFkaWVudEZpbGwoZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1N0YXJ0IFBvaW50JyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5zLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnRW5kIFBvaW50JyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5zLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnT3BhY2l0eScsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQubywgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBMZW5ndGgnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LmgsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdIaWdobGlnaHQgQW5nbGUnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LmEsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdDb2xvcnMnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LmcucHJvcCwgcGFyZW50KVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHR9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1ldGhvZHMsIEtleVBhdGhOb2RlKHN0YXRlKSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hhcGVHcmFkaWVudEZpbGw7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIFNoYXBlR3JhZGllbnRTdHJva2UoZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1N0YXJ0IFBvaW50JyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5zLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnRW5kIFBvaW50JyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5lLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnT3BhY2l0eScsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQubywgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBMZW5ndGgnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LmgsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdIaWdobGlnaHQgQW5nbGUnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LmEsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdDb2xvcnMnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LmcucHJvcCwgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1N0cm9rZSBXaWR0aCcsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQudywgcGFyZW50KVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHR9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1ldGhvZHMsIEtleVBhdGhOb2RlKHN0YXRlKSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hhcGVHcmFkaWVudFN0cm9rZTsiLCJ2YXIgS2V5UGF0aE5vZGUgPSByZXF1aXJlKCcuLi8uLi9rZXlfcGF0aC9LZXlQYXRoTm9kZScpO1xyXG52YXIgUHJvcGVydHkgPSByZXF1aXJlKCcuLi8uLi9wcm9wZXJ0eS9Qcm9wZXJ0eScpO1xyXG5cclxuZnVuY3Rpb24gU2hhcGVQYXRoKGVsZW1lbnQsIHBhcmVudCkge1xyXG5cclxuXHR2YXIgc3RhdGUgPSB7XHJcblx0XHRwYXJlbnQ6IHBhcmVudCxcclxuXHRcdHByb3BlcnRpZXM6IF9idWlsZFByb3BlcnR5TWFwKClcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldFBhdGgodmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGVsZW1lbnQuc2gpLnNldFZhbHVlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIF9idWlsZFByb3BlcnR5TWFwKCkge1xyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdwYXRoJyxcclxuXHRcdFx0XHR2YWx1ZTpQcm9wZXJ0eShlbGVtZW50LnNoLCBwYXJlbnQpXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obWV0aG9kcywgS2V5UGF0aE5vZGUoc3RhdGUpKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaGFwZVBhdGg7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIFNoYXBlUG9seXN0YXIoZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1BvaW50cycsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQuc2gucHQsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdQb3NpdGlvbicsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQuc2gucCwgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1JvdGF0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5zaC5yLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnSW5uZXIgUmFkaXVzJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5zaC5pciwgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ091dGVyIFJhZGl1cycsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQuc2gub3IsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdJbm5lciBSb3VuZG5lc3MnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LnNoLmlzLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnT3V0ZXIgUm91bmRuZXNzJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5zaC5vcywgcGFyZW50KVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHR9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1ldGhvZHMsIEtleVBhdGhOb2RlKHN0YXRlKSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hhcGVQb2x5c3RhcjsiLCJ2YXIgS2V5UGF0aE5vZGUgPSByZXF1aXJlKCcuLi8uLi9rZXlfcGF0aC9LZXlQYXRoTm9kZScpO1xyXG52YXIgUHJvcGVydHkgPSByZXF1aXJlKCcuLi8uLi9wcm9wZXJ0eS9Qcm9wZXJ0eScpO1xyXG5cclxuZnVuY3Rpb24gU2hhcGVSZWN0YW5nbGUoZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1NpemUnLFxyXG5cdFx0XHRcdHZhbHVlOiBQcm9wZXJ0eShlbGVtZW50LnNoLnMsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdQb3NpdGlvbicsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQuc2gucCwgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1JvdW5kbmVzcycsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQuc2guciwgcGFyZW50KVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHR9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1ldGhvZHMsIEtleVBhdGhOb2RlKHN0YXRlKSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hhcGVSZWN0YW5nbGU7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4uL3RyYW5zZm9ybS9UcmFuc2Zvcm0nKTtcclxuXHJcbmZ1bmN0aW9uIFNoYXBlUmVwZWF0ZXIoZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ0NvcGllcycsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQuYywgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ09mZnNldCcsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQubywgcGFyZW50KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1RyYW5zZm9ybScsXHJcblx0XHRcdFx0dmFsdWU6IFRyYW5zZm9ybShlbGVtZW50LnRyLCBwYXJlbnQpXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obWV0aG9kcywgS2V5UGF0aE5vZGUoc3RhdGUpKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaGFwZVJlcGVhdGVyOyIsInZhciBLZXlQYXRoTm9kZSA9IHJlcXVpcmUoJy4uLy4uL2tleV9wYXRoL0tleVBhdGhOb2RlJyk7XHJcbnZhciBQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uLy4uL3Byb3BlcnR5L1Byb3BlcnR5Jyk7XHJcblxyXG5mdW5jdGlvbiBTaGFwZVJvdW5kQ29ybmVycyhlbGVtZW50LCBwYXJlbnQpIHtcclxuXHJcblx0dmFyIHN0YXRlID0ge1xyXG5cdFx0cGFyZW50OiBwYXJlbnQsXHJcblx0XHRwcm9wZXJ0aWVzOiBfYnVpbGRQcm9wZXJ0eU1hcCgpXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfYnVpbGRQcm9wZXJ0eU1hcCgpIHtcclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnUmFkaXVzJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5yZCwgcGFyZW50KVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHR9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1ldGhvZHMsIEtleVBhdGhOb2RlKHN0YXRlKSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hhcGVSb3VuZENvcm5lcnM7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIFNoYXBlU3Ryb2tlKGVsZW1lbnQsIHBhcmVudCkge1xyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ0NvbG9yJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5jLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnU3Ryb2tlIFdpZHRoJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC53LCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnT3BhY2l0eScsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KGVsZW1lbnQubywgcGFyZW50KVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHR9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1ldGhvZHMsIEtleVBhdGhOb2RlKHN0YXRlKSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2hhcGVTdHJva2UiLCJ2YXIgS2V5UGF0aE5vZGUgPSByZXF1aXJlKCcuLi8uLi9rZXlfcGF0aC9LZXlQYXRoTm9kZScpO1xyXG52YXIgUHJvcGVydHkgPSByZXF1aXJlKCcuLi8uLi9wcm9wZXJ0eS9Qcm9wZXJ0eScpO1xyXG5cclxuZnVuY3Rpb24gU2hhcGVUcmltUGF0aHMoZWxlbWVudCwgcGFyZW50KSB7XHJcblxyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ1N0YXJ0JyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5zLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnRW5kJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5lLCBwYXJlbnQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnT2Zmc2V0JyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkoZWxlbWVudC5vLCBwYXJlbnQpXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obWV0aG9kcywgS2V5UGF0aE5vZGUoc3RhdGUpKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaGFwZVRyaW1QYXRoczsiLCJ2YXIgTGF5ZXJCYXNlID0gcmVxdWlyZSgnLi4vTGF5ZXJCYXNlJyk7XHJcblxyXG5mdW5jdGlvbiBTb2xpZChlbGVtZW50LCBwYXJlbnQpIHtcclxuXHJcblx0dmFyIHN0YXRlID0ge1xyXG5cdFx0ZWxlbWVudDogZWxlbWVudCxcclxuXHRcdHBhcmVudDogcGFyZW50LFxyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XVxyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgTGF5ZXJCYXNlKHN0YXRlKSwgbWV0aG9kcyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU29saWQ7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxudmFyIFRleHRBbmltYXRvciA9IHJlcXVpcmUoJy4vVGV4dEFuaW1hdG9yJyk7XHJcblxyXG5mdW5jdGlvbiBUZXh0KGVsZW1lbnQsIHBhcmVudCkge1xyXG5cclxuXHR2YXIgaW5zdGFuY2UgPSB7fVxyXG5cclxuXHR2YXIgc3RhdGUgPSB7XHJcblx0XHRlbGVtZW50OiBlbGVtZW50LFxyXG5cdFx0cGFyZW50OiBwYXJlbnQsXHJcblx0XHRwcm9wZXJ0aWVzOiBfYnVpbGRQcm9wZXJ0eU1hcCgpXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXREb2N1bWVudERhdGEoX2Z1bmN0aW9uKSB7XHJcblx0XHR2YXIgcHJldmlvdXNWYWx1ZTtcclxuXHRcdHZhciB0ZXh0RG9jdW1lbnRVcGRhdGVyID0gZnVuY3Rpb24oZGF0YSkge1xyXG5cdFx0XHR2YXIgbmV3VmFsdWUgPSBfZnVuY3Rpb24oZWxlbWVudC50ZXh0UHJvcGVydHkuY3VycmVudERhdGEpO1xyXG5cdFx0XHRpZiAocHJldmlvdXNWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcclxuXHRcdFx0XHRwcmV2aW91c1ZhbHVlID0gbmV3VmFsdWU7XHJcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRhdGEsIG5ld1ZhbHVlLCB7X19jb21wbGV0ZTogZmFsc2V9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF0YVxyXG5cdFx0fVxyXG5cdFx0ZWxlbWVudC50ZXh0UHJvcGVydHkuYWRkRWZmZWN0KHRleHREb2N1bWVudFVwZGF0ZXIpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYWRkQW5pbWF0b3JzKCkge1xyXG5cdFx0dmFyIGFuaW1hdG9yUHJvcGVydGllcyA9IFtdO1xyXG5cdFx0dmFyIGFuaW1hdG9ycyA9IGVsZW1lbnQudGV4dEFuaW1hdG9yLl9hbmltYXRvcnNEYXRhO1xyXG5cdFx0dmFyIGksIGxlbiA9IGFuaW1hdG9ycy5sZW5ndGg7XHJcblx0XHR2YXIgdGV4dEFuaW1hdG9yO1xyXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XHJcblx0XHRcdHRleHRBbmltYXRvciA9IFRleHRBbmltYXRvcihhbmltYXRvcnNbaV0pXHJcblx0XHRcdGFuaW1hdG9yUHJvcGVydGllcy5wdXNoKHtcclxuXHRcdFx0XHRuYW1lOiBlbGVtZW50LnRleHRBbmltYXRvci5fdGV4dERhdGEuYVtpXS5ubSB8fCAnQW5pbWF0b3IgJyArIChpKzEpLCAvL0ZhbGxiYWNrIGZvciBvbGQgYW5pbWF0aW9uc1xyXG5cdFx0XHRcdHZhbHVlOiB0ZXh0QW5pbWF0b3JcclxuXHRcdFx0fSlcclxuXHRcdH1cclxuXHRcdHJldHVybiBhbmltYXRvclByb3BlcnRpZXM7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBfYnVpbGRQcm9wZXJ0eU1hcCgpIHtcclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidTb3VyY2UnLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0RG9jdW1lbnREYXRhXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRdLmNvbmNhdChhZGRBbmltYXRvcnMoKSlcclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oaW5zdGFuY2UsIG1ldGhvZHMsIEtleVBhdGhOb2RlKHN0YXRlKSk7XHJcblxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRleHQ7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIFRleHRBbmltYXRvcihhbmltYXRvcikge1xyXG5cclxuXHR2YXIgaW5zdGFuY2UgPSB7fVxyXG5cclxuXHR2YXIgc3RhdGUgPSB7XHJcblx0XHRwcm9wZXJ0aWVzOiBfYnVpbGRQcm9wZXJ0eU1hcCgpXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRBbmNob3JQb2ludCh2YWx1ZSkge1xyXG5cdFx0UHJvcGVydHkoYW5pbWF0b3IuYS5hKS5zZXRWYWx1ZSh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRGaWxsQnJpZ2h0bmVzcyh2YWx1ZSkge1xyXG5cdFx0UHJvcGVydHkoYW5pbWF0b3IuYS5mYikuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0RmlsbENvbG9yKHZhbHVlKSB7XHJcblx0XHRQcm9wZXJ0eShhbmltYXRvci5hLmZjKS5zZXRWYWx1ZSh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRGaWxsSHVlKHZhbHVlKSB7XHJcblx0XHRQcm9wZXJ0eShhbmltYXRvci5hLmZoKS5zZXRWYWx1ZSh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRGaWxsU2F0dXJhdGlvbih2YWx1ZSkge1xyXG5cdFx0UHJvcGVydHkoYW5pbWF0b3IuYS5mcykuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0RmlsbE9wYWNpdHkodmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGFuaW1hdG9yLmEuZm8pLnNldFZhbHVlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldE9wYWNpdHkodmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGFuaW1hdG9yLmEubykuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0UG9zaXRpb24odmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGFuaW1hdG9yLmEucCkuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0Um90YXRpb24odmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGFuaW1hdG9yLmEucikuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0Um90YXRpb25YKHZhbHVlKSB7XHJcblx0XHRQcm9wZXJ0eShhbmltYXRvci5hLnJ4KS5zZXRWYWx1ZSh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRSb3RhdGlvblkodmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGFuaW1hdG9yLmEucnkpLnNldFZhbHVlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldFNjYWxlKHZhbHVlKSB7XHJcblx0XHRQcm9wZXJ0eShhbmltYXRvci5hLnMpLnNldFZhbHVlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldFNrZXdBeGlzKHZhbHVlKSB7XHJcblx0XHRQcm9wZXJ0eShhbmltYXRvci5hLnNhKS5zZXRWYWx1ZSh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRTdHJva2VDb2xvcih2YWx1ZSkge1xyXG5cdFx0UHJvcGVydHkoYW5pbWF0b3IuYS5zYykuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0U2tldyh2YWx1ZSkge1xyXG5cdFx0UHJvcGVydHkoYW5pbWF0b3IuYS5zaykuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0U3Ryb2tlT3BhY2l0eSh2YWx1ZSkge1xyXG5cdFx0UHJvcGVydHkoYW5pbWF0b3IuYS5zbykuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0U3Ryb2tlV2lkdGgodmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGFuaW1hdG9yLmEuc3cpLnNldFZhbHVlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldFN0cm9rZUJyaWdodG5lc3ModmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGFuaW1hdG9yLmEuc2IpLnNldFZhbHVlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldFN0cm9rZUh1ZSh2YWx1ZSkge1xyXG5cdFx0UHJvcGVydHkoYW5pbWF0b3IuYS5zaCkuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0U3Ryb2tlU2F0dXJhdGlvbih2YWx1ZSkge1xyXG5cdFx0UHJvcGVydHkoYW5pbWF0b3IuYS5zcykuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0VHJhY2tpbmdBbW91bnQodmFsdWUpIHtcclxuXHRcdFByb3BlcnR5KGFuaW1hdG9yLmEudCkuc2V0VmFsdWUodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonQW5jaG9yIFBvaW50JyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IHNldEFuY2hvclBvaW50XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonRmlsbCBCcmlnaHRuZXNzJyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IHNldEZpbGxCcmlnaHRuZXNzXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonRmlsbCBDb2xvcicsXHJcblx0XHRcdFx0dmFsdWU6IHtcclxuXHRcdFx0XHRcdHNldFZhbHVlOiBzZXRGaWxsQ29sb3JcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidGaWxsIEh1ZScsXHJcblx0XHRcdFx0dmFsdWU6IHtcclxuXHRcdFx0XHRcdHNldFZhbHVlOiBzZXRGaWxsSHVlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonRmlsbCBTYXR1cmF0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IHNldEZpbGxTYXR1cmF0aW9uXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonRmlsbCBPcGFjaXR5JyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IHNldEZpbGxPcGFjaXR5XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonT3BhY2l0eScsXHJcblx0XHRcdFx0dmFsdWU6IHtcclxuXHRcdFx0XHRcdHNldFZhbHVlOiBzZXRPcGFjaXR5XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonUG9zaXRpb24nLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0UG9zaXRpb25cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidSb3RhdGlvbiBYJyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IHNldFJvdGF0aW9uWFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6J1JvdGF0aW9uIFknLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0Um90YXRpb25ZXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonU2NhbGUnLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0U2NhbGVcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidTa2V3IEF4aXMnLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0U2tld0F4aXNcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidTdHJva2UgQ29sb3InLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0U3Ryb2tlQ29sb3JcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidTa2V3JyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IHNldFNrZXdcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidTdHJva2UgV2lkdGgnLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0U3Ryb2tlV2lkdGhcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidUcmFja2luZyBBbW91bnQnLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0VHJhY2tpbmdBbW91bnRcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidTdHJva2UgT3BhY2l0eScsXHJcblx0XHRcdFx0dmFsdWU6IHtcclxuXHRcdFx0XHRcdHNldFZhbHVlOiBzZXRTdHJva2VPcGFjaXR5XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTonU3Ryb2tlIEJyaWdodG5lc3MnLFxyXG5cdFx0XHRcdHZhbHVlOiB7XHJcblx0XHRcdFx0XHRzZXRWYWx1ZTogc2V0U3Ryb2tlQnJpZ2h0bmVzc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6J1N0cm9rZSBTYXR1cmF0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IHNldFN0cm9rZVNhdHVyYXRpb25cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOidTdHJva2UgSHVlJyxcclxuXHRcdFx0XHR2YWx1ZToge1xyXG5cdFx0XHRcdFx0c2V0VmFsdWU6IHNldFN0cm9rZUh1ZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHR9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKGluc3RhbmNlLCBtZXRob2RzLCBLZXlQYXRoTm9kZShzdGF0ZSkpO1xyXG5cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUZXh0QW5pbWF0b3I7IiwidmFyIExheWVyQmFzZSA9IHJlcXVpcmUoJy4uL0xheWVyQmFzZScpO1xyXG52YXIgVGV4dCA9IHJlcXVpcmUoJy4vVGV4dCcpO1xyXG5cclxuZnVuY3Rpb24gVGV4dEVsZW1lbnQoZWxlbWVudCkge1xyXG5cclxuXHR2YXIgaW5zdGFuY2UgPSB7fTtcclxuXHJcblx0dmFyIFRleHRQcm9wZXJ0eSA9IFRleHQoZWxlbWVudCk7XHJcblx0dmFyIHN0YXRlID0ge1xyXG5cdFx0ZWxlbWVudDogZWxlbWVudCxcclxuXHRcdHByb3BlcnRpZXM6IF9idWlsZFByb3BlcnR5TWFwKClcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIF9idWlsZFByb3BlcnR5TWFwKCkge1xyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICd0ZXh0JyxcclxuXHRcdFx0XHR2YWx1ZTogVGV4dFByb3BlcnR5XHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiAnVGV4dCcsXHJcblx0XHRcdFx0dmFsdWU6IFRleHRQcm9wZXJ0eVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRUZXh0KCkge1xyXG5cdFx0cmV0dXJuIGVsZW1lbnQudGV4dFByb3BlcnR5LmN1cnJlbnREYXRhLnQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRUZXh0KHZhbHVlLCBpbmRleCkge1xyXG5cdFx0c2V0RG9jdW1lbnREYXRhKHt0OiB2YWx1ZX0sIGluZGV4KTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNldERvY3VtZW50RGF0YShkYXRhLCBpbmRleCkge1xyXG5cdFx0cmV0dXJuIGVsZW1lbnQudXBkYXRlRG9jdW1lbnREYXRhKGRhdGEsIGluZGV4KTtcclxuXHR9XHJcblx0XHJcblx0ZnVuY3Rpb24gY2FuUmVzaXplRm9udChfY2FuUmVzaXplKSB7XHJcblx0XHRyZXR1cm4gZWxlbWVudC5jYW5SZXNpemVGb250KF9jYW5SZXNpemUpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0TWluaW11bUZvbnRTaXplKF9mb250U2l6ZSkge1xyXG5cdFx0cmV0dXJuIGVsZW1lbnQuc2V0TWluaW11bUZvbnRTaXplKF9mb250U2l6ZSk7XHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHRcdGdldFRleHQ6IGdldFRleHQsXHJcblx0XHRzZXRUZXh0OiBzZXRUZXh0LFxyXG5cdFx0Y2FuUmVzaXplRm9udDogY2FuUmVzaXplRm9udCxcclxuXHRcdHNldERvY3VtZW50RGF0YTogc2V0RG9jdW1lbnREYXRhLFxyXG5cdFx0c2V0TWluaW11bUZvbnRTaXplOiBzZXRNaW5pbXVtRm9udFNpemVcclxuXHR9XHJcblxyXG5cdHJldHVybiBPYmplY3QuYXNzaWduKGluc3RhbmNlLCBMYXllckJhc2Uoc3RhdGUpLCBtZXRob2RzKTtcclxuXHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGV4dEVsZW1lbnQ7IiwidmFyIEtleVBhdGhOb2RlID0gcmVxdWlyZSgnLi4vLi4va2V5X3BhdGgvS2V5UGF0aE5vZGUnKTtcclxudmFyIFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vcHJvcGVydHkvUHJvcGVydHknKTtcclxuXHJcbmZ1bmN0aW9uIFRyYW5zZm9ybShwcm9wcywgcGFyZW50KSB7XHJcblx0dmFyIHN0YXRlID0ge1xyXG5cdFx0cHJvcGVydGllczogX2J1aWxkUHJvcGVydHlNYXAoKVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gX2J1aWxkUHJvcGVydHlNYXAoKSB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogJ0FuY2hvciBQb2ludCcsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KHByb3BzLmEsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdQb2ludCBvZiBJbnRlcmVzdCcsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KHByb3BzLmEsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdQb3NpdGlvbicsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KHByb3BzLnAsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdTY2FsZScsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KHByb3BzLnMsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdSb3RhdGlvbicsXHJcblx0XHRcdFx0dmFsdWU6IFByb3BlcnR5KHByb3BzLnIsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdYIFBvc2l0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkocHJvcHMucHgsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdZIFBvc2l0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkocHJvcHMucHksIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdaIFBvc2l0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkocHJvcHMucHosIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdYIFJvdGF0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkocHJvcHMucngsIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdZIFJvdGF0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkocHJvcHMucnksIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdaIFJvdGF0aW9uJyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkocHJvcHMucnosIHBhcmVudClcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6ICdPcGFjaXR5JyxcclxuXHRcdFx0XHR2YWx1ZTogUHJvcGVydHkocHJvcHMubywgcGFyZW50KVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRUYXJnZXRUcmFuc2Zvcm0oKSB7XHJcblx0XHRyZXR1cm4gcHJvcHM7XHJcblx0fVxyXG5cclxuXHR2YXIgbWV0aG9kcyA9IHtcclxuXHRcdGdldFRhcmdldFRyYW5zZm9ybTogZ2V0VGFyZ2V0VHJhbnNmb3JtXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihtZXRob2RzLCBLZXlQYXRoTm9kZShzdGF0ZSkpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTsiLCJ2YXIgS2V5UGF0aE5vZGUgPSByZXF1aXJlKCcuLi9rZXlfcGF0aC9LZXlQYXRoTm9kZScpO1xyXG52YXIgVmFsdWVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vVmFsdWVQcm9wZXJ0eScpO1xyXG5cclxuZnVuY3Rpb24gUHJvcGVydHkocHJvcGVydHksIHBhcmVudCkge1xyXG5cdHZhciBzdGF0ZSA9IHtcclxuXHRcdHByb3BlcnR5OiBwcm9wZXJ0eSxcclxuXHRcdHBhcmVudDogcGFyZW50XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xyXG5cdFx0c3RhdGUucHJvcGVydHkgPSBudWxsO1xyXG5cdFx0c3RhdGUucGFyZW50ID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdHZhciBtZXRob2RzID0ge1xyXG5cdFx0ZGVzdHJveTogZGVzdHJveVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG1ldGhvZHMsIFZhbHVlUHJvcGVydHkoc3RhdGUpLCBLZXlQYXRoTm9kZShzdGF0ZSkpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFByb3BlcnR5OyIsImZ1bmN0aW9uIFZhbHVlUHJvcGVydHkoc3RhdGUpIHtcclxuXHRcclxuXHRmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSkge1xyXG5cdFx0dmFyIHByb3BlcnR5ID0gc3RhdGUucHJvcGVydHk7XHJcblx0XHRpZighcHJvcGVydHkgfHwgIXByb3BlcnR5LmFkZEVmZmVjdCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdHJldHVybiBwcm9wZXJ0eS5hZGRFZmZlY3QodmFsdWUpO1xyXG5cdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wVHlwZSA9PT0gJ211bHRpZGltZW5zaW9uYWwnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUubGVuZ3RoID09PSAyKSB7XHJcblx0XHRcdHJldHVybiBwcm9wZXJ0eS5hZGRFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdmFsdWV9KTtcclxuXHRcdH0gZWxzZSBpZiAocHJvcGVydHkucHJvcFR5cGUgPT09ICd1bmlkaW1lbnNpb25hbCcgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG5cdFx0XHRyZXR1cm4gcHJvcGVydHkuYWRkRWZmZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHZhbHVlfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcclxuXHRcdHJldHVybiBzdGF0ZS5wcm9wZXJ0eS52O1xyXG5cdH1cclxuXHJcblx0dmFyIG1ldGhvZHMgPSB7XHJcblx0XHRzZXRWYWx1ZTogc2V0VmFsdWUsXHJcblx0XHRnZXRWYWx1ZTogZ2V0VmFsdWVcclxuXHR9XHJcblxyXG5cdHJldHVybiBtZXRob2RzO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFZhbHVlUHJvcGVydHk7IiwidmFyIExheWVyTGlzdCA9IHJlcXVpcmUoJy4uL2xheWVyL0xheWVyTGlzdCcpO1xyXG52YXIgS2V5UGF0aExpc3QgPSByZXF1aXJlKCcuLi9rZXlfcGF0aC9LZXlQYXRoTGlzdCcpO1xyXG5cclxuZnVuY3Rpb24gUmVuZGVyZXIoc3RhdGUpIHtcclxuXHJcblx0c3RhdGUuX3R5cGUgPSAncmVuZGVyZXInO1xyXG5cclxuXHRmdW5jdGlvbiBnZXRSZW5kZXJlclR5cGUoKSB7XHJcblx0XHRyZXR1cm4gc3RhdGUuYW5pbWF0aW9uLmFuaW1UeXBlO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe1xyXG5cdFx0Z2V0UmVuZGVyZXJUeXBlOiBnZXRSZW5kZXJlclR5cGVcclxuXHR9LCBMYXllckxpc3Qoc3RhdGUuZWxlbWVudHMpLCBLZXlQYXRoTGlzdChzdGF0ZS5lbGVtZW50cywgJ3JlbmRlcmVyJykpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlcmVyOyJdfQ==\r\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 idPrefix$1 = '';\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var _shouldRoundValues = false;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n\n (function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface$1() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n\n return value;\n }\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\n\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n\n default:\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n\n default:\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\n };\n\n var getIdPrefix = function getIdPrefix() {\n return idPrefix$1;\n };\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n\n return JSON.parse(JSON.stringify(comp.layers));\n }\n\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n\n return null;\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n }\n };\n\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: 'no'\n });\n charData.data.shapes[0].it.push({\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n },\n sk: {\n k: 0,\n a: 0\n },\n sa: {\n k: 0,\n a: 0\n },\n ty: 'tr'\n });\n }\n }\n }\n }\n };\n }();\n\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n\n try {\n xhr.open('GET', path, true);\n } catch (error) {\n xhr.open('GET', fullPath + '/' + path, true);\n }\n\n xhr.send();\n }\n\n return {\n load: loadAsset\n };\n }();\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n\n _workerSelf.dataManager.completeData(animation);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n\n if (box.width || _count > 500) {\n this._imageLoaded();\n\n clearInterval(intervalId);\n }\n\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n\n if (keysCount === 0) {\n throw new Error();\n }\n\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n\n markers.push(markerData);\n }\n\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n\n function getRenderer(key) {\n return renderers[key];\n }\n\n function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = 'svg';\n\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n\n var RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (_typeof$4(animationData) !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== 'false';\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n this.setParams(params);\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_pause');\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_play');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n\n return null;\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.renderer = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {// TODO: decide how to handle catch case\n }\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize; // moduleOb.start = start;\n\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n /* eslint-disable */\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n var pooling = function () {\n function _double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n \"double\": _double\n };\n }();\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n }();\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments())\n };\n }\n\n return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n\n flag = false;\n }\n }\n\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0t0 = t0 * t0 * t0; //\n\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0t1 = t0 * t0 * t1; //\n\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1t1 = t0 * t1 * t1; //\n\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n var PropertyFactory = function () {\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyframeMetadata.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n function getProp(elem, data, type, mult, container) {\n var p;\n\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n\n default:\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\n\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return poolFactory(8, create);\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n\n default:\n arr = [];\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n\n return newPath;\n };\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n var shapeCollectionPool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching); /// /\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i;\n var len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue;\n\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n\n var i;\n var len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2; // }\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\n function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n function setLocation(href) {\n setLocationHref(href);\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n\n case 'matrix':\n return Matrix;\n\n default:\n return null;\n }\n }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocation;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize; // lottie.start = start;\n\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.useWebWorker = setWebWorker;\n lottie.setIDPrefix = setPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.9.6';\n\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n\n return null;\n }\n\n var queryString = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n try {\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n } catch (err) {//\n }\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return clonedPath;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n if (!this.a.k) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {//\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n\n while (pos > 0) {\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 1,\n ix: 6,\n k: [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n s: {\n a: 0,\n ix: 3,\n k: [100, 100]\n },\n sa: {\n a: 0,\n ix: 5,\n k: 0\n },\n sk: {\n a: 0,\n ix: 4,\n k: 0\n },\n ty: 'tr'\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n\n cont += 1;\n }\n\n this._currentCopies = copies; /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n\n return hasReloaded;\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return clonedPath;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = []; // Hindi characters\n\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n var zeroWidthJoiner = [65039, 8205];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode); // Remember width with no applied web font\n\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n\n return helper.measureText(text).width;\n }\n\n return {\n measureText: measure\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach(function (data) {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n }\n\n return emptyChar;\n }\n\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName);\n\n var index = _char2.charCodeAt(0);\n\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper;\n\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index + 1] = tHelper.measureText(_char2) / 100;\n }\n }\n\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n if (!secondCharCode) {\n return firstCharCode === zeroWidthJoiner[1];\n }\n\n return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n }\n\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isCombinedCharacter = isCombinedCharacter;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; // layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; // list of animated components\n\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n }\n\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n\n return this._mask.op.v * 100;\n }\n });\n\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i;\n var len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n\n var value = '';\n\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n val = property.v * mult;\n\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n\n return expressionValue;\n };\n } // TODO: try to avoid using this getter\n\n\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n\n return MultidimensionalPropertyInterface(property);\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s)\n });\n\n var _px;\n\n var _py;\n\n var _pz;\n\n var _transformFactory;\n\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n }\n\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n\n default:\n return null;\n }\n }\n\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n\n return effectElements[i]();\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return null; // return {active:false};\n }\n\n Object.defineProperty(_thisLayerFunction, '_name', {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n _name: {\n value: shape.nm\n },\n ix: {\n value: shape.ix\n },\n propertyIndex: {\n value: shape.ix\n },\n mn: {\n value: shape.mn\n },\n propertyGroup: {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); // interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function get() {\n return 'a';\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function get() {\n return dashOb;\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n\n if (value === 0) {\n return propertyGroup;\n }\n\n return interfaces[value - 1];\n }\n\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function parentGroupWrapper() {\n return propertyGroup;\n }\n\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _prevValue;\n\n var _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n\n if (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n eff = null;\n\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0;\n var len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n /**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n function FrameElement() {}\n\n FrameElement.prototype = {\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false; // list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\n\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n\n if (_typeof$2(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n var propertyNameIndex = value.indexOf(currentPropertyName);\n\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n\n if (_typeof$2(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n return '';\n }\n\n return init;\n };\n\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n\n FootageElement.prototype.prepareFrame = function () {};\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n\n FootageElement.prototype.renderFrame = function () {};\n\n FootageElement.prototype.destroy = function () {};\n\n FootageElement.prototype.initExpressions = function () {\n this.layerInterface = FootageInterface(this);\n };\n\n FootageElement.prototype.getFootageData = function () {\n return this.footageData;\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n k: [100]\n }, 1, 0.01, this);\n }\n\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 15:\n return this.createFootage(layer);\n\n default:\n return this.createNull(layer);\n }\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n\n if (path.length === 0) {\n return element;\n }\n\n return element.getElementByPath(path);\n };\n\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix()\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } // TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {// this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i;\n var len = transforms.length;\n var ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n } // pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n return ob;\n }();\n\n var registeredEffects = {};\n var idPrefix = 'filter_result_';\n\n function SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n\n if (registeredEffects[type].countsAsEffect) {\n count += 1;\n }\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n function registerEffect(id, effect, countsAsEffect) {\n registeredEffects[id] = {\n effect: effect,\n countsAsEffect: countsAsEffect\n };\n }\n\n function SVGBaseElement() {}\n\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n var filId;\n var fil;\n var gg;\n\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n // eslint-disable-line eqeqeq\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\n\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\n\n if (!featureSupport.maskType && this.data.td == 1) {\n // eslint-disable-line eqeqeq\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (this.data.td == 2) {\n // eslint-disable-line eqeqeq\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); /// /\n // This solution doesn't work on Android when meta tag with viewport attribute is set\n\n /* var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix); */\n /// /\n\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc); /// /\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\n function HierarchyElement() {}\n\n HierarchyElement.prototype = {\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\n\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n\n function RenderableDOMElement() {}\n\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i;\n var len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0;\n var len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n\n case 'no':\n return renderNoop;\n\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {}\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var props;\n var iterations;\n var k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops;\n var i;\n var len;\n var stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n } // gfill.setAttribute('fy','200');\n\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\n\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n\n while (i < len) {\n charCode = text.charCodeAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n shouldCombine = false;\n } else {\n charactersArray.push(text.substr(i, 2));\n }\n\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n shouldCombine = true;\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n shouldCombine = true;\n } else {\n charactersArray.push(text.charAt(i));\n }\n\n i += 1;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n } // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n\n var threshold = 0.5 - smoothness * 0.5;\n\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r.v) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO; //\n\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n } //\n\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n\n default:\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true; // Force alignment only works with a single line for now\n\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\n\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n\n var emptyShapeData = {\n shapes: []\n };\n\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n\n return data;\n };\n\n SVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n default:\n justify = 'start';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n } //\n\n }\n\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n\n extendPrototype([BaseRenderer], SVGRendererBase);\n\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRendererBase.prototype.updateContainerSize = function () {};\n\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n };\n\n SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\n };\n /* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n }; */\n\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i;\n var len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n SVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n },\n width: config && config.width,\n height: config && config.height\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n\n extendPrototype([SVGRendererBase], SVGRenderer);\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i;\n var len = 15;\n this.savedOp = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = len;\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray('float32', newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n };\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n\n function CVEffects() {}\n\n CVEffects.prototype.renderFrame = function () {};\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n\n this.hasMasks = hasMasks;\n\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\n\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects(this);\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem[\"do\"] = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n\n CVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type; // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n\n renderer.ctxOpacity(currentStyle.coOp);\n\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st' || type === 'gs') {\n ctx.stroke();\n\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n\n if (type !== 'st' && type !== 'gs') {\n ctx.fill(currentStyle.r);\n }\n\n renderer.restore();\n }\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {//\n }\n }\n\n if (isMain) {\n this.drawLayer();\n }\n };\n\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n\n styledShape.trNodes = shapeNodes;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n\n styleElem.grd = grd;\n }\n\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\n }\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill(); /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke(); /// ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n\n CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVSolidElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh); //\n };\n\n function CanvasRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n }\n\n extendPrototype([BaseRenderer], CanvasRendererBase);\n\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n /* if(op === 1){\r\n return;\r\n } */\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n\n this.contextData.cO *= op < 0 ? 0 : op;\n\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n };\n\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRendererBase.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.save();\n }\n\n var props = this.contextData.cTr.props;\n\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n\n var i;\n var arr = this.contextData.saved[this.contextData.cArrPos];\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n };\n\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i;\n var arr = this.contextData.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n\n if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n };\n\n CanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n\n CanvasRendererBase.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth;\n var elementHeight;\n\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n\n var elementRel;\n var animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n // console.log('NEW: ',num);\n\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\n };\n\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.layers = null;\n this.elements = null;\n };\n\n CVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n }\n\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\n }\n\n if (this.finalTransform._opMdf) {\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n HSolidElement.prototype.createContent = function () {\n var rect;\n\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n\n this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n\n return point;\n };\n\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i;\n var len = shape._length;\n var vPoint;\n var oPoint;\n var nextIPoint;\n var nextVPoint;\n\n if (len <= 1) {\n return;\n }\n\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n };\n\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n // eslint-disable-line no-plusplus\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b |= 0; // eslint-disable-line no-bitwise\n\n a |= 0; // eslint-disable-line no-bitwise\n\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {//\n } else if (a === 0) {\n t = -c / b;\n\n if (t > 0 && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n } else {\n b2ac = b * b - 4 * c * a;\n\n if (b2ac >= 0) {\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n }\n }\n\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n } 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 var svgStyle;\n\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n }\n\n if (this.isMasked && this.finalTransform._matMdf) {\n // Todo Benchmark if using this is better than getBBox\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n svgStyle = this.svgElement.style;\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n svgStyle.transform = translation;\n svgStyle.webkitTransform = translation;\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i;\n var len;\n var count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n } else {\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.webkitTransform = renderedLetter.m;\n textSpan.style.transform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n svgStyle = this.svgElement.style;\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n svgStyle.transform = svgTransform;\n svgStyle.webkitTransform = svgTransform;\n }\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i;\n var len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n this.finalTransform = {\n mProp: this\n };\n }\n\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i;\n var len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n perspectiveStyle = comp.perspectiveElem.style;\n containerStyle = comp.container.style;\n var perspective = this.pe.v + 'px';\n var origin = '0px 0px 0px';\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveStyle.perspective = perspective;\n perspectiveStyle.webkitPerspective = perspective;\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n perspectiveStyle.transform = matrix;\n perspectiveStyle.webkitTransform = matrix;\n }\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n\n if (this.hierarchy) {\n len = this.hierarchy.length - 1;\n\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector;\n\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n var matValue = this.mat.toCSS();\n containerStyle = comp.container.style;\n containerStyle.transform = matValue;\n containerStyle.webkitTransform = matValue;\n }\n\n if (this.pe._mdf) {\n perspectiveStyle = comp.perspectiveElem.style;\n perspectiveStyle.perspective = this.pe.v + 'px';\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n\n this.mat.clone(this._prevMat);\n }\n }\n\n this._isFirstFrame = false;\n };\n\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HybridRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement;\n var nextLayer;\n var tmpDOMElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n\n return new HShapeElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n\n return new HImageElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n\n return new HSolidElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n\n return null;\n };\n\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n var style;\n var containerStyle;\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n style = perspectiveElem.style;\n style.width = this.globalData.compSize.w + 'px';\n style.height = this.globalData.compSize.h + 'px';\n var center = '50% 50%';\n style.webkitTransformOrigin = center;\n style.mozTransformOrigin = center;\n style.transformOrigin = center;\n containerStyle = container.style;\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n containerStyle.transform = matrix;\n containerStyle.webkitTransform = matrix;\n }\n\n perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n\n len = this.threeDElements.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRendererBase.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n var style = resizerElem.style;\n style.width = animData.w + 'px';\n style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n style.transformStyle = 'flat';\n style.mozTransformStyle = 'flat';\n style.webkitTransformStyle = 'flat';\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData; // Mask animation\n\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n this.elements[i].destroy();\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRendererBase.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx;\n var sy;\n var tx;\n var ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n var style = this.resizerElem.style;\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n style.transform = style.webkitTransform;\n };\n\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i;\n var len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n var style = this.threeDElements[i].perspectiveElem.style;\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n style.perspective = style.webkitPerspective;\n }\n }\n };\n\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([HybridRendererBase], HybridRenderer);\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n\n return ob;\n }();\n\n function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n /* eslint-disable */\n\n /*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\n function seedRandom(pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$1(obj),\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n }\n\n ;\n\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n initialize$2(BMMath);\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n }\n\n function $bm_neg(a) {\n var tOfA = _typeof(a);\n\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n\n if (a.propType) {\n return a.v;\n }\n\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n\n return a % b;\n }\n\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n\n default:\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n\n b = l; // achromatic\n\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n\n if (t <= tMin) {\n return value1;\n }\n\n if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i;\n var len = max.length;\n\n if (!min) {\n min = createTypedArray('float32', len);\n }\n\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n }\n\n iWiggle += 1;\n } // var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n }\n\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n\n return arr;\n }\n\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n lenKey = arr.length;\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n\n return value.substring(init, end);\n }\n\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n\n return value.substr(init, end);\n }\n\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n expression_function();\n this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n } // Bundlers will see these as dead code and unless we reference them\n\n\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath];\n return ob;\n }();\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n\n if (v1.length) {\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.001; // frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n\n if (samples <= 1) {\n return this.pv;\n }\n\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n\n var sampleValue;\n\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n\n i += 1;\n }\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n } /// /\n\n\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n\n return matrix; /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) {\n // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) {\n // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n if (magnitude === 0) {\n return [0, 0];\n }\n\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n };\n }\n\n function initialize$1() {\n addPropertyDecorator();\n }\n\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\n\n SVGComposableEffect.prototype = {\n createMergeNode: function createMergeNode(resultId, ins) {\n var feMerge = createNS('feMerge');\n feMerge.setAttribute('result', resultId);\n var feMergeNode;\n var i;\n\n for (i = 0; i < ins.length; i += 1) {\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', ins[i]);\n feMerge.appendChild(feMergeNode);\n feMerge.appendChild(feMergeNode);\n }\n\n return feMerge;\n }\n };\n\n function SVGTintFilter(filter, filterManager, elem, id, source) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n filter.appendChild(feMerge);\n }\n\n extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id);\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(fil, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n filter.appendChild(feComponentTransfer);\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB);\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n } // Green\n\n\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n } // Blue\n\n\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n } // Alpha\n\n\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n } // RGB\n\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n }\n\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n var 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 registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n ShapeModifiers.registerModifier('rd', RoundCornersModifier); // Registering expression plugin\n\n setExpressionsPlugin(Expressions);\n initialize$1();\n initialize(); // Registering svg effects\n\n registerEffect(20, SVGTintFilter, true);\n registerEffect(21, SVGFillFilter, true);\n registerEffect(22, SVGStrokeEffect, false);\n registerEffect(23, SVGTritoneFilter, true);\n registerEffect(24, SVGProLevelsFilter, true);\n registerEffect(25, SVGDropShadowEffect, true);\n registerEffect(28, SVGMatte3Effect, false);\n registerEffect(29, SVGGaussianBlurEffect, true);\n\n return lottie;\n\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t52: 0\n};\n\nvar installChunk = (data) => {\n\tvar {ids, modules, runtime} = data;\n\t// add \"modules\" to the modules object,\n\t// then flag all \"ids\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in modules) {\n\t\tif(__webpack_require__.o(modules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = modules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\tfor(;i < ids.length; i++) {\n\t\tchunkId = ids[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[ids[i]] = 0;\n\t}\n\n}\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// import() chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[1]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = import(\"./\" + __webpack_require__.u(chunkId)).then(installChunk, (e) => {\n\t\t\t\t\t\tif(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t});\n\t\t\t\t\tvar promise = Promise.race([promise, new Promise((resolve) => (installedChunkData = installedChunks[chunkId] = [resolve]))])\n\t\t\t\t\tpromises.push(installedChunkData[1] = promise);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no external install chunk\n\n// no on chunks loaded","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"ca\" + \"-chunk-\" + \"376838a732d73e3f6b47\" + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"https://static.nrk.no/dh/module/avslort/static/\";","// startup\n// Load entry module and return exports\n// This entry module doesn't tell about it's top-level declarations so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(131);\n"],"names":["module","exports","getContextId","_coreAnalyticsPromise","BaseElement","HTMLElement","constructor","super","this","sendError","bind","sendGaEvent","connectedCallback","name","Error","setupTracker","render","coreAnalyticsTracker","Promise","resolve","window","then","m","default","coreAnalytics","tracker","create","container","parentId","metadata","location","href","ga","dataset","gaPropertyId","title","contentId","selfId","publishDate","published","async","message","event","eventCategory","JSON","parse","preloadedState","errorTracking","url","enabled","POLOPOLY_ID_REGEX","str","matches","match","length","extractPolopolyIdFromString","trackProgress","articleStart","getArticleStart","articleEnd","getArticleEnd","outroStart","getOutroStart","resizeListener","addEventListener","beforeArticleStart","document","scrollingElement","scrollTop","afterArticleStart","beforeArticleEnd","passedOutroStart","calculateArticleProgress","current","start","end","Math","min","max","disconnect","removeEventListener","startElement","querySelector","titleBottom","getBoundingClientRect","getAttribute","heiboksElement","top","scrollHeight","documentElement","clientHeight","bottom","multiplyMatrices","A","B","Array","isArray","map","x","p","B_cols","_","i","product","row","col","ret","c","isString","type","o","Object","prototype","toString","call","toLowerCase","toPrecision","n","precision","integerLength","floor","toFixed","p10","round","parseFunction","trim","isNumberRegex","parts","args","replace","$0","arg","test","Number","slice","unit","startsWith","alpha","push","rawName","rawArgs","last","arr","interpolate","isNaN","interpolateInv","value","mapRange","from","to","parseCoordGrammar","coordGrammars","coordGrammar","split","range","String","hooks","add","callback","first","arguments","forEach","run","env","context","gamut_mapping","deltaE","WHITES","D50","D65","getWhite","adapt","W1","W2","XYZ","options","TypeError","M","ColorSpace","id","base","get","aliases","fromBase","toBase","coords","white","formats","format","cssId","functions","color","defineProperty","referred","reverse","inGamut","epsilon","isPolar","coordMeta","values","every","meta","undefined","getFormat","space","connectionSpace","connectionSpaceIndex","myPath","otherPath","getMinCoords","refRange","all","Set","registry","alias","register","alternatives","ref","workingSpace","coord","coordType","includes","coordId","entries","index","normalizedCoord","keys","join","coordFormats","outputType","fromRange","toRange","suffix","serializeCoords","DEFAULT_FORMAT","y","z","ids","RGBColorSpace","r","g","b","XYZ_D65","toXYZ_M","fromXYZ_M","rgb","xyz","parsed","util.parseFunction","shift","indexOf","pop","colorSpec","argCount","fill","spaceId","didYouMean","lastAlpha","util.last","providedType","find","coordName","util.mapRange","formatId","getColor","getAll","prop","resolveCoord","setAll","set","object","ε3","κ","l","a","xyz_d50","f","cbrt","Lab","pow","constrain","angle","h","hue","L","abs","NaN","atan2","PI","sqrt","constrainAngle","LCH","Lightness","Chroma","Hue","cos","sin","Gfactor","π","r2d","d2r","sample","kL","kC","kH","L1","a1","b1","lab","C1","lch","L2","a2","b2","C2","C7","G","adash1","adash2","Cdash1","Cdash2","h1","h2","Δh","ΔL","ΔC","hdiff","hsum","habs","console","log","hdash","ΔH","Ldash","Cdash","Cdash7","lsq","SL","SC","T","SH","Δθ","exp","RC","dE","clone","toGamut","method","defaults","util.isString","spaceColor","clipped","deltaE2000","mapSpace","mappedColor","ε","low","high","bounds","serialize","customOptions","checkInGamut","util.toPrecision","unshift","strAlpha","commas","returns","α","β","REC2020Linear","RGB","val","sRGBLinear","sign","rgba","component","parseInt","collapse","collapsible","hex","padStart","KEYWORDS","black","P3Linear","sRGB","display_space","CSS","supports","REC2020","P3","distance","color1","color2","coords1","coords2","reduce","acc","c1","c2","getLuminance","xyz_d65","setLuminance","Color","fclamp","Y","linearize","Y1","Y2","background","foreground","S","C","Sapc","R","lumTxt","lumBg","Ytxt","Ybg","BoW","denom","uv","X","Z","xy","sum","v","AbsXYZ","c3","pinv","d","d0","XYZtoCone_M","ConetoXYZ_M","ConetoIab_M","IabtoCone_M","jz","az","bz","XYZ_Abs_D65","Xa","Ya","Za","PQLMS","Iz","Jzazbz","Jz","LMS","Xm","Ym","cz","hz","jzazbz","jzczhz","m1","m2","im1","im2","XYZtoLMS_M","LMStoIPT_M","IPTtoLMS_M","LMStoXYZ_M","ct","cp","LMStoICtCp","ICtCp","ICtCptoLMS","LMStoLab_M","LabtoLMS_M","LMSg","OKLab","H1","H2","C4","F","Jz1","Cz1","Hz1","Jz2","Cz2","Hz2","ΔJ","I1","T1","P1","ictcp","I2","T2","P2","oklab","Δa","Δb","rest","deltaEMethods","amount","mix","outputSpace","steps","colorRange","isRange","rangeArgs","colors","maxDeltaE","deltaEMethod","maxSteps","rangeOptions","totalDelta","actualSteps","ceil","step","maxDelta","cur","ΔΕ","prev","splice","progression","premultiplied","interpolationSpace","arc","θ1","θ2","angles","angleDiff","angles.adjust","assign","defineFunction","s","hsl","k","HSL","hsv","w","HSV","hwb","A98Linear","XYZ_D50","ProPhotoLinear","oklch","minv","cssid","CATs","defineCAT","toCone_M","fromCone_M","ρs","γs","βs","ρd","γd","βd","scaled_cone_M","D55","D75","E","F2","F7","F11","ACES","ACES_min_nonzero","ACES_cc_max","log2","ACEScg","toJSON","display","fallbackColor","code","instance","func","defineFunctions","equals","util","Space","spaces","key","addSpaceAccessors","propId","Proxy","has","obj","property","e","Reflect","receiver","configurable","enumerable","extend","variations","algorithm","algorithms","contrastAlgorithms","chromaticity","luminance","interpolation","contrastMethods","MIX_CONFIG","ProgressPlayer","animationType","createElement","classList","styles","style","contain","progressGrid","prepend","body","target","direction","loop","currentFrame","goToAndStop","requestAnimationFrame","setDirection","play","check","setTimeout","getArticleProgress","articleProgress","targetFrame","nextFrame","playUntil","skipToEnd","skipToIntro","resume","isPlaying","isPaused","destroy","lottie","renderer","autoplay","animationData","animationDataMobile","animationDataDesktop","rendererSettings","preserveAspectRatio","animationApi","lottieApi","keyPath","getKeyPath","concat","addValueCallback","goToAndPlay","matchMedia","updateColorLoop","targetColor","bcRect","section","elementsFromPoint","left","element","className","getComputedStyle","progress","hydrate","el","props","disconnectProgress","largeTexts","querySelectorAll","observer","IntersectionObserver","entry","isIntersecting","unobserve","threshold","rootMargin","text","observe","hydrateMarker","hydrateFokus","animate","titles","innerHTML","textContent","char","idx","contains","hydrateTitles","progressTracker","player","state","nextState","fadeIn","waitUntil","transitionToArticleProgress","updateProgress","reverseTransitionToIntro","playOutro","reverseOutro","syncState","hydrateProgress","tag","__APP_NAME__","version","__APP_VERSION__","AppElement","disconnectedCallback","eventAction","customElements","define","Function","root","result","Date","setTime","getTime","RegExp","newRegExp","fixTypes","stringify","fixPropertyValue","original","copy","originalValue","newValue","Infinity","getOwnPropertyNames","regexpText","slashIndex","lastIndexOf","t","u","require","Renderer","layer_api","AnimationItemFactory","animation","elements","item","boundingRect","scaleData","getCurrentFrame","getCurrentTime","frameRate","properties","len","getPropertyAtIndex","setValue","toKeypathLayerPoint","point","points","fromKeypathLayerPoint","calculateScaleData","scale","xAlignment","yAlignment","compWidth","compHeight","compRel","elementWidth","width","elementHeight","height","elementRel","aspectRatio","renderConfig","substr","scaleYOffset","scaleXOffset","recalculateSize","wrapper","toContainerPoint","newPoint","fromContainerPoint","getScaleData","methods","LAYER_TRANSFORM","key_path_separator","sanitizeString","propertyPath","keyPathSplit","selector","TextElement","ShapeElement","NullElement","SolidElement","ImageElement","CameraElement","LayerBase","parent","layerType","data","ty","Composition","shapes","itemsData","string","createTypedArray","Matrix","_cos","_sin","_tan","tan","_rnd","reset","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","sy","skew","ax","ay","skewFromAxis","sz","setTransform","j","translate","tx","tz","transform","d2","e2","f2","g2","i2","j2","k2","l2","n2","o2","p2","_p","_identityCalculated","d1","e1","f1","g1","i1","j1","k1","l1","n1","o1","p1","isIdentity","_identity","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","inversePoint","pt","determinant","inversePoints","pts","retPts","applyToTriplePoints","pt1","pt2","pt3","p0","p4","p5","p12","p13","applyToPointArray","applyToPointStringified","toCSS","cssValue","to2dCSS","MatrixInstance","createRegularArray","Float32Array","Int16Array","Uint8ClampedArray","AnimationItem","createAnimationApi","anim","keyPathBuilder","layer_types","KeyPathList","node_type","_getLength","_filterLayerByType","filter","getTargetLayer","_filterLayerByName","nm","_filterLayerByProperty","hasProperty","getProperty","getLayersByType","getLayersByName","getPropertiesBySelector","getLayerProperty","nodesByName","nodesByType","selectedNodes","keyPathData","nodes","nodesElements","getElements","KeyPathNode","getPropertyByPath","instanceProperties","Transform","Effects","finalTransform","mProp","effects","effectsManager","effectElements","_buildPropertyMap","toWorldMat","getTargetTransform","applyToMatrix","hierarchy","LayerList","getLayers","layer","addIteratableMethods","iteratableMethods","list","accumulator","_value","_arguments","apply","getTargetElements","Property","Camera","pe","rx","ry","rz","or","TimeRemap","buildLayerApi","_layerApi","ob","getLayerApi","compositionLayers","layers","tm","ValueProperty","_destroyFunction","_isCallbackAdded","currentSegmentInit","currentSegmentEnd","previousTime","currentTime","_loop","_speed","_paused","_isDebugging","queuedSegments","enterFrameEvent","time","playSegment","init","clear","clearQueue","now","addCallback","playQueuedSegment","newSegment","queueSegment","_segmentPlayer","currentValue","nowTime","elapsedTime","onEnterFrame","playTo","mult","setLoop","flag","setSpeed","setDebugging","pause","EffectElement","effect","buildProperties","getValue","effectData","Image","ShapeContents","Shape","shapeContents","ShapeRectangle","ShapeFill","ShapeStroke","ShapeEllipse","ShapeGradientFill","ShapeGradientStroke","ShapeTrimPaths","ShapeRepeater","ShapePolystar","ShapeRoundCorners","ShapePath","shapesData","cachedShapeProperties","buildShapeObject","shape","it","mProps","sh","ir","is","os","tr","rd","Solid","TextAnimator","Text","setDocumentData","_function","previousValue","textDocumentUpdater","textProperty","currentData","__complete","addEffect","addAnimators","textAnimator","animatorProperties","animators","_animatorsData","_textData","animator","setAnchorPoint","setFillBrightness","fb","setFillColor","fc","setFillHue","fh","setFillSaturation","fs","setFillOpacity","fo","setOpacity","setPosition","setRotationX","setRotationY","setScale","setSkewAxis","sa","setStrokeColor","sc","setSkew","sk","setStrokeOpacity","so","setStrokeWidth","sw","setStrokeBrightness","sb","setStrokeHue","setStrokeSaturation","ss","setTrackingAmount","TextProperty","getText","setText","updateDocumentData","canResizeFont","_canResize","setMinimumFontSize","_fontSize","px","py","pz","_typeof","Symbol","iterator","propType","getRendererType","animType","_type","factory","navigator","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sources","destination","sourcePrototype","attr","hasOwnProperty","getDescriptor","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","setRate","rateValue","createAudio","assetPath","Howl","src","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createSizedArray","_typeof$6","subframeEnabled","expressionsPlugin","idPrefix$1","isSafari","userAgent","_shouldRoundValues","bmPow","bmSqrt","bmFloor","bmMax","bmMin","BMMath","ProjectInterface$1","propertyNames","random","absArr","defaultCurveSegments","degToRads","roundCorner","roundValues","bmRnd","styleDiv","position","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","totalTime","frameMultiplier","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","q","RGBtoHSV","addSaturationToRGB","offset","addBrightnessToRGB","addHueToRGB","rgbToHex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","_workerSelf","setupWorker","fn","Worker","Blob","blob","URL","createObjectURL","createWorker","completeLayers","comps","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","completeText","comp","findComp","__used","ks","checkVersion","minimum","animVersionString","animVersion","minimumVersion","checkText","iterateLayers","textLayer","documentData","assets","checkChars","chars","charData","ip","op","st","sr","checkPathProperties","pathData","checkColors","iterateShapes","checkShapes","completeClosingShapes","closed","cl","moduleOb","completeChars","dataFunctionManager","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","response","responseText","load","fullPath","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","error","send","completeData","payload","process","onComplete","onError","createProcess","loadAnimation","processId","origin","pathname","loadData","completeAnimation","ImagePreloader","proxyImage","canvas","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","createFootageData","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","getAsset","createImgData","crossOrigin","createImageData","setAttributeNS","_elementHelper","append","appendChild","setCacheType","elementHelper","BaseEvent","triggerEvent","eventName","_cbs","callbacks","markerParser","parsePayloadLines","line","lines","keysCount","_markers","markers","_marker","markerData","duration","dr","cm","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","prepareFrame","xt","compInterface","renderers","registerRenderer","getRenderer","_typeof$4","isLoaded","currentRawFrame","frameMult","playSpeed","playDirection","playCount","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","RendererClass","globalData","defs","setProjectInterface","autoloadSegments","initialSegment","setupAnimation","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","rendererType","initItems","gotoFrame","resize","updateContainerSize","setSubframe","renderFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","isFrame","numValue","frameModifier","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","pendingFrame","forceFlag","resetSegments","onLoopComplete","onSegmentStart","onDestroy","getPath","getAssetData","hide","show","getDuration","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","searchAnimations","standalone","animElements","getElementsByClassName","lenAnims","setAttribute","getElementsByTagName","innerText","div","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","beziers","bezEasing","BezierEasing","kSampleStepSize","float32ArraySupported","aA1","aA2","calcBezier","aT","getSlope","_mSampleValues","_precomputed","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt4","ptCoord","perc","ptDistance","curveSegments","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","PropertyFactory","initFrame","mathAbs","interpolateValue","frameNum","caching","offsetTime","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","out","quat","qx","qy","qz","qw","heading","attitude","bank","nextKeyTime","keyTime","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","quatStart","createQuaternion","quatEnd","omega","cosom","sinom","scale0","scale1","aw","bx","by","bw","acos","slerp","asin","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","effectFunction","addDynamicProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","getProp","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","convertToPath","convertStarToPath","convertPolygonToPath","rad","roundness","perimSegment","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","getInverseMatrix","inverseMatrix","roundMatrixProperty","_typeof$3","setLocation","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","scripts","myScript","bodymovin","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","_isDirty","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","getFontProperties","fontData","fStyle","fWeight","weight","eo","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","resetElements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","currentV","currentI","currentO","closerV","newPosPerc","FontManager","emptyChar","size","combinedCharacters","surrogateModifiers","zeroWidthJoiner","setUpNode","font","family","parentNode","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","familyArray","enabledFamilies","trimFontOptions","createHelper","def","helper","engine","fontProps","tHelper","fFamily","fClass","tCanvasHelper","OffscreenCanvas","measureText","getComputedTextLength","Font","typekitLoaded","_warned","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","isZeroWidthJoiner","isCombinedCharacter","_char3","fontPrototype","found","ch","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","rel","getCharData","_char","charCodeAt","warn","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","removeChild","RenderableElement","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","MaskManagerInterface","MaskInterface","mask","_mask","_data","maskManager","_masksInterfaces","viewData","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","getVelocityAtTime","numKeys","valueProp","valueAtTime","speedAtTime","getSpeedAtTime","velocityAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","rotation","xRotation","yRotation","xPosition","yPosition","zPosition","anchorPoint","opacity","_px","_py","_pz","_transformFactory","LayerExpressionInterface","getMatrix","_elem","toWorldVec","applyPoint","toWorld","fromWorldVec","invertPoint","fromWorld","fromComp","sampleImage","transformInterface","_thisLayerFunction","shapeInterface","textInterface","toComp","anchorPointDescriptor","defineProperties","hasParent","layerInterface","anchor_point","active","startTime","source","inPoint","outPoint","_name","registerMaskInterface","registerEffectsInterface","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","EffectsExpressionInterface","createGroupInterface","groupInterface","ef","mn","_propertyGroup","createValueInterface","numProperties","np","en","expressionProperty","setGroupProperty","createEffectsInterface","effectsData","CompExpressionInterface","pixelAspect","compSize","frameDuration","displayStartTime","numLayers","ShapePathInterface","view","propertyIndex","ShapeExpressionInterface","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","content","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dataProps","strokeWidth","dash","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","TextExpressionInterface","_prevValue","_sourceText","sourceText","stringValue","getBlendMode","blendModeEnums","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effectItem","GroupEffect","FrameElement","_typeof$2","eff","checkMasks","effectsInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","initBaseData","layerId","getType","prepareProperties","isVisible","_isParent","FootageInterface","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","getFootageData","searchProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","FootageElement","imageLoader","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","TransformElement","MaskElement","maskElement","solidPath","rect","expansor","feMorph","count","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","invRect","drawPath","maskedElement","getBaseElement","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","setAsParent","setHierarchy","addPendingElement","pendingElements","pathValue","setupGlobalData","fontsContainer","animationItem","initTransform","_matMdf","_opMdf","ao","renderTransform","finalMat","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","registeredEffects","idPrefix","SVGEffects","filterManager","createFilter","filters","Effect","countsAsEffect","registerEffect","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","ln","hd","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","renderableEffectsManager","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","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","lj","ml","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","dist","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","_frameId","keysIndex","canResize","minimumFontSize","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentIndex","textKeys","buildFinalText","charCode","charactersArray","shouldCombine","charAt","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","indexes","rn","totalChars","newInd","currentInd","newData","dData","recalculate","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","easer","tot","smoothness","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_renderType","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","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","rot","atan","buildNewText","createPathShape","shapeStr","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","svgElement","ariaLabel","titleElement","titleId","description","descElement","descId","contentVisibility","viewBoxOnly","viewBoxSize","focusable","filterSize","destroyed","CVContextData","saved","cArrPos","cTr","cO","savedOp","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVEffects","CVMaskElement","hasMasks","CVBaseElement","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","CVShapeElement","CVTextElement","stroke","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","clearCanvas","dpr","devicePixelRatio","currentGlobalAlpha","contextData","transformMat","CVCompElement","CanvasRenderer","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","appendElementInPos","nextElement","insertBefore","setElements","destroyElements","duplicate","newLength","currentSavedOp","sequence","processSequence","processSequences","getNewKey","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","createElements","blendMode","globalCompositeOperation","hideElement","showElement","forceRealStack","ctxTransform","ctxOpacity","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","currentStyle","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","drawImage","cProps","trProps","globalAlpha","actionFlag","popped","containerStyle","mozTransformOrigin","transformCanvas","isDashed","animationRel","offsetHeight","fillType","clearRect","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","right","yMax","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","box","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","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","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","center","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","svg","cWidth","cHeight","floatingContainer","_createBaseContainerElements","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","_typeof$1","seedRandom","global","startdenom","significance","ARC4","keylen","me","flatten","depth","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","ExpressionManager","fetch","frames","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","loopIn","loop_in","loopOut","loop_out","smooth","fromCompToSurface","thisLayer","thisComp","scoped_bm_rt","expression_function","eval","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","executeExpression","frameExpressionId","__preventDeadCodeRemoval","expressionHelpers","searchExpressions","speed","delta","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","lastKeyFrame","initV","endV","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","initialize","SVGComposableEffect","SVGTintFilter","matrixFilter","feMerge","createMergeNode","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","resultId","ins","feMergeNode","colorBlack","colorWhite","groupPath","elemChildren","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","sigma","dimensions","sigmaX","sigmaY","edgeMode","__webpack_module_cache__","leafPrototypes","getProto","installedChunks","installChunk","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","getter","__esModule","getPrototypeOf","ns","definition","chunkId","promises","miniCssF","toStringTag","nmd","modules","runtime","installedChunkData","promise","import","race","__webpack_exports__"],"sourceRoot":""}