Файловый менеджер - Редактировать - /home/avadvi5/public_html/wp-content/plugins/elementor/assets/js/e-react-promotions.js
Ðазад
/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "../assets/dev/js/editor/components/dynamic-tags/control-behavior.js": /*!***************************************************************************!*\ !*** ../assets/dev/js/editor/components/dynamic-tags/control-behavior.js ***! \***************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; /* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"]; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); var TagPanelView = __webpack_require__(/*! elementor-dynamic-tags/tag-panel-view */ "../assets/dev/js/editor/components/dynamic-tags/tag-panel-view.js"); module.exports = Marionette.Behavior.extend({ tagView: null, listenerAttached: false, initialize: function initialize() { if (!this.listenerAttached) { this.listenTo(this.view.options.container.settings, 'change:external:__dynamic__', this.onAfterExternalChange); this.listenerAttached = true; } }, shouldRenderTools: function shouldRenderTools() { var hasDefault = this.getOption('dynamicSettings').default; if (hasDefault) { return false; } var isFeatureAvailableToUser = elementor.helpers.hasPro() && !elementor.helpers.hasProAndNotConnected(), hasTags = this.getOption('tags').length > 0; return !isFeatureAvailableToUser || hasTags; }, renderTools: function renderTools() { var _this = this; if (!this.shouldRenderTools()) { return; } var $dynamicSwitcher = jQuery(Marionette.Renderer.render('#tmpl-elementor-control-dynamic-switcher')); $dynamicSwitcher.on('click', function (event) { return _this.onDynamicSwitcherClick(event); }); this.$el.find('.elementor-control-dynamic-switcher-wrapper').append($dynamicSwitcher); this.ui.dynamicSwitcher = $dynamicSwitcher; if ('color' === this.view.model.get('type')) { if (this.view.colorPicker) { this.moveDynamicSwitcherToColorPicker(); } else { setTimeout(function () { return _this.moveDynamicSwitcherToColorPicker(); }); } } // Add a Tipsy Tooltip to the Dynamic Switcher this.ui.dynamicSwitcher.tipsy({ title: function title() { return this.getAttribute('data-tooltip'); }, gravity: 's' }); }, moveDynamicSwitcherToColorPicker: function moveDynamicSwitcherToColorPicker() { var $colorPickerToolsContainer = this.view.colorPicker.$pickerToolsContainer; this.ui.dynamicSwitcher.removeClass('elementor-control-unit-1').addClass('e-control-tool'); var $eyedropper = $colorPickerToolsContainer.find('.elementor-control-element-color-picker'); if ($eyedropper.length) { this.ui.dynamicSwitcher.insertBefore($eyedropper); } else { $colorPickerToolsContainer.append(this.ui.dynamicSwitcher); } }, toggleDynamicClass: function toggleDynamicClass() { this.$el.toggleClass('elementor-control-dynamic-value', this.isDynamicMode()); }, isDynamicMode: function isDynamicMode() { var dynamicSettings = this.view.container.settings.get('__dynamic__'); return !!(dynamicSettings && dynamicSettings[this.view.model.get('name')]); }, createTagsList: function createTagsList() { var tags = _.groupBy(this.getOption('tags'), 'group'), groups = elementor.dynamicTags.getConfig('groups'), $tagsList = this.ui.tagsList = jQuery('<div>', { class: 'elementor-tags-list' }), $tagsListInner = jQuery('<div>', { class: 'elementor-tags-list__inner' }); $tagsList.append($tagsListInner); jQuery.each(groups, function (groupName) { var groupTags = tags[groupName]; if (!groupTags) { return; } var group = this, $groupTitle = jQuery('<div>', { class: 'elementor-tags-list__group-title' }).text(group.title); $tagsListInner.append($groupTitle); groupTags.forEach(function (tag) { var $tag = jQuery('<div>', { class: 'elementor-tags-list__item' }); $tag.text(tag.title).attr('data-tag-name', tag.name); $tagsListInner.append($tag); }); }); // Create and inject pro dynamic teaser template if Pro is not installed if (!elementor.helpers.hasPro() && Object.keys(tags).length) { var proTeaser = Marionette.Renderer.render('#tmpl-elementor-dynamic-tags-promo', { promotionUrl: elementor.config.dynamicPromotionURL.replace('%s', this.view.model.get('name')) }); $tagsListInner.append(proTeaser); } $tagsListInner.on('click', '.elementor-tags-list__item', this.onTagsListItemClick.bind(this)); elementorCommon.elements.$body.append($tagsList); }, getTagsList: function getTagsList() { if (!this.ui.tagsList) { this.createTagsList(); } return this.ui.tagsList; }, toggleTagsList: function toggleTagsList() { var $tagsList = this.getTagsList(); if ($tagsList.is(':visible')) { $tagsList.hide(); return; } var direction = elementorCommon.config.isRTL ? 'left' : 'right'; $tagsList.show().position({ my: "".concat(direction, " top"), at: "".concat(direction, " bottom+5"), of: this.ui.dynamicSwitcher }); }, setTagView: function setTagView(id, name, settings) { if (this.tagView) { this.tagView.destroy(); } var tagView = this.tagView = new TagPanelView({ id: id, name: name, settings: settings, controlName: this.view.model.get('name'), dynamicSettings: this.getOption('dynamicSettings') }), elementContainer = this.view.options.container, tagViewLabel = elementContainer.controls[tagView.options.controlName].label; tagView.options.container = new elementorModules.editor.Container({ type: 'dynamic', id: id, model: tagView.model, settings: tagView.model, view: tagView, parent: elementContainer, label: elementContainer.label + ' ' + tagViewLabel, controls: tagView.model.options.controls, renderer: elementContainer }); tagView.render(); this.$el.find('.elementor-control-tag-area').after(tagView.el); this.listenTo(tagView, 'remove', this.onTagViewRemove.bind(this)); }, setDefaultTagView: function setDefaultTagView() { var tagData = elementor.dynamicTags.tagTextToTagData(this.getDynamicValue()); this.setTagView(tagData.id, tagData.name, tagData.settings); }, tagViewToTagText: function tagViewToTagText() { var tagView = this.tagView; return elementor.dynamicTags.tagDataToTagText(tagView.getOption('id'), tagView.getOption('name'), tagView.model); }, getDynamicValue: function getDynamicValue() { return this.view.container.dynamic.get(this.view.model.get('name')); }, destroyTagView: function destroyTagView() { if (this.tagView) { this.tagView.destroy(); this.tagView = null; } }, showPromotion: function showPromotion() { var hasProAndNotConnected = elementor.helpers.hasProAndNotConnected(), dialogOptions = { title: __('Dynamic Content', 'elementor'), content: __('Create more personalized and dynamic sites by populating data from various sources with dozens of dynamic tags to choose from.', 'elementor'), targetElement: this.ui.dynamicSwitcher, position: { blockStart: '-10' }, actionButton: { url: hasProAndNotConnected ? elementorProEditorConfig.urls.connect : elementor.config.dynamicPromotionURL.replace('%s', this.view.model.get('name')), text: hasProAndNotConnected ? __('Connect & Activate', 'elementor') : __('Upgrade', 'elementor') } }; elementor.promotion.showDialog(dialogOptions); }, onRender: function onRender() { this.$el.addClass('elementor-control-dynamic'); this.renderTools(); this.toggleDynamicClass(); if (this.isDynamicMode()) { this.setDefaultTagView(); } }, onDynamicSwitcherClick: function onDynamicSwitcherClick(event) { event.stopPropagation(); if (this.getOption('tags').length) { this.toggleTagsList(); } else { this.showPromotion(); } }, onTagsListItemClick: function onTagsListItemClick(event) { var $tag = jQuery(event.currentTarget); this.setTagView(elementorCommon.helpers.getUniqueId(), $tag.data('tagName'), {}); // If an element has an active global value, disable it before applying the dynamic value. if (this.view.getGlobalKey()) { this.view.triggerMethod('unset:global:value'); } if (this.isDynamicMode()) { $e.run('document/dynamic/settings', { container: this.view.options.container, settings: (0, _defineProperty2.default)({}, this.view.model.get('name'), this.tagViewToTagText()) }); } else { $e.run('document/dynamic/enable', { container: this.view.options.container, settings: (0, _defineProperty2.default)({}, this.view.model.get('name'), this.tagViewToTagText()) }); } this.toggleDynamicClass(); this.toggleTagsList(); if (this.tagView.getTagConfig().settings_required) { this.tagView.showSettingsPopup(); } }, onTagViewRemove: function onTagViewRemove() { $e.run('document/dynamic/disable', { container: this.view.options.container, settings: (0, _defineProperty2.default)({}, this.view.model.get('name'), this.tagViewToTagText()) }); this.toggleDynamicClass(); }, onAfterExternalChange: function onAfterExternalChange() { this.destroyTagView(); if (this.isDynamicMode()) { this.setDefaultTagView(); } this.toggleDynamicClass(); }, onDestroy: function onDestroy() { this.destroyTagView(); if (this.ui.tagsList) { this.ui.tagsList.remove(); } } }); /***/ }), /***/ "../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack-empty.js": /*!***********************************************************************************!*\ !*** ../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack-empty.js ***! \***********************************************************************************/ /***/ ((module) => { "use strict"; module.exports = Marionette.ItemView.extend({ className: 'elementor-tag-controls-stack-empty', template: '#tmpl-elementor-tag-controls-stack-empty' }); /***/ }), /***/ "../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack.js": /*!*****************************************************************************!*\ !*** ../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack.js ***! \*****************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var EmptyView = __webpack_require__(/*! elementor-dynamic-tags/tag-controls-stack-empty */ "../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack-empty.js"); module.exports = elementorModules.editor.views.ControlsStack.extend({ activeTab: 'content', template: _.noop, emptyView: EmptyView, isEmpty: function isEmpty() { // Ignore the section control return this.collection.length < 2; }, childViewOptions: function childViewOptions() { return { container: this.options.container }; }, getNamespaceArray: function getNamespaceArray() { var currentPageView = elementor.getPanelView().getCurrentPageView(), eventNamespace = currentPageView.getNamespaceArray(); eventNamespace.push(currentPageView.activeSection); eventNamespace.push(this.getOption('controlName')); eventNamespace.push(this.getOption('name')); return eventNamespace; }, onRenderTemplate: function onRenderTemplate() { this.activateFirstSection(); } }); /***/ }), /***/ "../assets/dev/js/editor/components/dynamic-tags/tag-panel-view.js": /*!*************************************************************************!*\ !*** ../assets/dev/js/editor/components/dynamic-tags/tag-panel-view.js ***! \*************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var TagControlsStack = __webpack_require__(/*! elementor-dynamic-tags/tag-controls-stack */ "../assets/dev/js/editor/components/dynamic-tags/tag-controls-stack.js"); module.exports = Marionette.ItemView.extend({ className: 'elementor-dynamic-cover e-input-style', tagControlsStack: null, templateHelpers: function templateHelpers() { var helpers = {}; if (this.model) { helpers.controls = this.model.options.controls; } return helpers; }, ui: { remove: '.elementor-dynamic-cover__remove' }, events: function events() { var events = { 'click @ui.remove': 'onRemoveClick' }; if (this.hasSettings()) { events.click = 'onClick'; } return events; }, getTemplate: function getTemplate() { var config = this.getTagConfig(), templateFunction = Marionette.TemplateCache.get('#tmpl-elementor-control-dynamic-cover'), renderedTemplate = Marionette.Renderer.render(templateFunction, { hasSettings: this.hasSettings(), isRemovable: !this.getOption('dynamicSettings').default, title: config.title, content: config.panel_template }); return Marionette.TemplateCache.prototype.compileTemplate(renderedTemplate.trim()); }, getTagConfig: function getTagConfig() { return elementor.dynamicTags.getConfig('tags.' + this.getOption('name')); }, initSettingsPopup: function initSettingsPopup() { var settingsPopupOptions = { className: 'elementor-tag-settings-popup', position: { my: 'left top+5', at: 'left bottom', of: this.$el, autoRefresh: true }, hide: { ignore: '.select2-container' } }; var settingsPopup = elementorCommon.dialogsManager.createWidget('buttons', settingsPopupOptions); this.getSettingsPopup = function () { return settingsPopup; }; }, hasSettings: function hasSettings() { return !!Object.values(this.getTagConfig().controls).length; }, showSettingsPopup: function showSettingsPopup() { if (!this.tagControlsStack) { this.initTagControlsStack(); } var settingsPopup = this.getSettingsPopup(); if (settingsPopup.isVisible()) { return; } settingsPopup.show(); }, initTagControlsStack: function initTagControlsStack() { this.tagControlsStack = new TagControlsStack({ model: this.model, controls: this.model.controls, name: this.options.name, controlName: this.options.controlName, container: this.options.container, el: this.getSettingsPopup().getElements('message')[0] }); this.tagControlsStack.render(); }, initModel: function initModel() { this.model = new elementorModules.editor.elements.models.BaseSettings(this.getOption('settings'), { controls: this.getTagConfig().controls }); }, initialize: function initialize() { // The `model` should always be available. this.initModel(); if (!this.hasSettings()) { return; } this.initSettingsPopup(); this.listenTo(this.model, 'change', this.render); }, onClick: function onClick() { this.showSettingsPopup(); }, onRemoveClick: function onRemoveClick(event) { event.stopPropagation(); this.destroy(); this.trigger('remove'); }, onDestroy: function onDestroy() { if (this.hasSettings()) { this.getSettingsPopup().destroy(); } if (this.tagControlsStack) { this.tagControlsStack.destroy(); } } }); /***/ }), /***/ "../assets/dev/js/editor/components/validator/base.js": /*!************************************************************!*\ !*** ../assets/dev/js/editor/components/validator/base.js ***! \************************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorModules.Module.extend({ errors: [], __construct: function __construct(settings) { var customValidationMethod = settings.customValidationMethod; if (customValidationMethod) { this.validationMethod = customValidationMethod; } }, getDefaultSettings: function getDefaultSettings() { return { validationTerms: {} }; }, isValid: function isValid() { var validationErrors = this.validationMethod.apply(this, arguments); if (validationErrors.length) { this.errors = validationErrors; return false; } return true; }, validationMethod: function validationMethod(newValue) { var validationTerms = this.getSettings('validationTerms'), errors = []; if (validationTerms.required) { if (!('' + newValue).length) { errors.push('Required value is empty'); } } return errors; } }); /***/ }), /***/ "../assets/dev/js/editor/components/validator/breakpoint.js": /*!******************************************************************!*\ !*** ../assets/dev/js/editor/components/validator/breakpoint.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js")); var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js")); function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var NumberValidator = __webpack_require__(/*! elementor-validator/number */ "../assets/dev/js/editor/components/validator/number.js"); var BreakpointValidator = exports["default"] = /*#__PURE__*/function (_NumberValidator) { function BreakpointValidator() { (0, _classCallCheck2.default)(this, BreakpointValidator); return _callSuper(this, BreakpointValidator, arguments); } (0, _inherits2.default)(BreakpointValidator, _NumberValidator); return (0, _createClass2.default)(BreakpointValidator, [{ key: "getDefaultSettings", value: function getDefaultSettings() { return { validationTerms: { // Max width we allow in general max: 5120 } }; } /** * Get Panel Active Breakpoints * * Since the active kit used in the Site Settings panel could be a draft, we need to use the panel's active * breakpoints settings and not the elementorFrontend.config values (which come from the DB). * * @return {*} Object */ }, { key: "getPanelActiveBreakpoints", value: function getPanelActiveBreakpoints() { var panelBreakpoints = elementor.documents.currentDocument.config.settings.settings.active_breakpoints.map(function (breakpointName) { return breakpointName.replace('viewport_', ''); }), panelActiveBreakpoints = {}; panelBreakpoints.forEach(function (breakpointName) { panelActiveBreakpoints[breakpointName] = elementorFrontend.config.responsive.breakpoints[breakpointName]; }); return panelActiveBreakpoints; } }, { key: "initBreakpointProperties", value: function initBreakpointProperties() { var _activeBreakpoints$br, _activeBreakpoints$br2; var validationTerms = this.getSettings('validationTerms'), activeBreakpoints = this.getPanelActiveBreakpoints(), breakpointKeys = Object.keys(activeBreakpoints); this.breakpointIndex = breakpointKeys.indexOf(validationTerms.breakpointName); this.topBreakpoint = (_activeBreakpoints$br = activeBreakpoints[breakpointKeys[this.breakpointIndex + 1]]) === null || _activeBreakpoints$br === void 0 ? void 0 : _activeBreakpoints$br.value; this.bottomBreakpoint = (_activeBreakpoints$br2 = activeBreakpoints[breakpointKeys[this.breakpointIndex - 1]]) === null || _activeBreakpoints$br2 === void 0 ? void 0 : _activeBreakpoints$br2.value; } }, { key: "validationMethod", value: function validationMethod(newValue) { var validationTerms = this.getSettings('validationTerms'), errors = NumberValidator.prototype.validationMethod.call(this, newValue); // Validate both numeric and empty values, since breakpoints utilize default values when empty. if (_.isFinite(newValue) || '' === newValue) { if (!this.validateMinMaxForBreakpoint(newValue, validationTerms)) { errors.push('Value is not between the breakpoints above or under the edited breakpoint'); } } return errors; } }, { key: "validateMinMaxForBreakpoint", value: function validateMinMaxForBreakpoint(newValue, validationTerms) { var breakpointDefaultValue = elementorFrontend.config.responsive.breakpoints[validationTerms.breakpointName].default_value; var isValid = true; this.initBreakpointProperties(); // Since the following comparison is <=, allow usage of the 320px value for the mobile breakpoint. if ('mobile' === validationTerms.breakpointName && 320 === this.bottomBreakpoint) { this.bottomBreakpoint -= 1; } // If there is a breakpoint below the currently edited breakpoint if (this.bottomBreakpoint) { // Check that the new value is not under the bottom breakpoint's value. if ('' !== newValue && newValue <= this.bottomBreakpoint) { isValid = false; } // If the new value is empty, check that the default breakpoint value is not below the bottom breakpoint. if ('' === newValue && breakpointDefaultValue <= this.bottomBreakpoint) { isValid = false; } } // If there is a breakpoint above the currently edited breakpoint. if (this.topBreakpoint) { // Check that the value is not above the top breakpoint's value. if ('' !== newValue && newValue >= this.topBreakpoint) { isValid = false; } // If the new value is empty, check that the default breakpoint value is not above the top breakpoint. if ('' === newValue && breakpointDefaultValue >= this.topBreakpoint) { isValid = false; } } return isValid; } }]); }(NumberValidator); /***/ }), /***/ "../assets/dev/js/editor/components/validator/number.js": /*!**************************************************************!*\ !*** ../assets/dev/js/editor/components/validator/number.js ***! \**************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var Validator = __webpack_require__(/*! elementor-validator/base */ "../assets/dev/js/editor/components/validator/base.js"); module.exports = Validator.extend({ validationMethod: function validationMethod(newValue) { var validationTerms = this.getSettings('validationTerms'), errors = []; if (_.isFinite(newValue)) { if (undefined !== validationTerms.min && newValue < validationTerms.min) { errors.push('Value is less than minimum'); } if (undefined !== validationTerms.max && newValue > validationTerms.max) { errors.push('Value is greater than maximum'); } } return errors; } }); /***/ }), /***/ "../assets/dev/js/editor/controls/base-data.js": /*!*****************************************************!*\ !*** ../assets/dev/js/editor/controls/base-data.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js")); var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); var _breakpoint = _interopRequireDefault(__webpack_require__(/*! elementor-validator/breakpoint */ "../assets/dev/js/editor/components/validator/breakpoint.js")); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } var ControlBaseView = __webpack_require__(/*! elementor-controls/base */ "../assets/dev/js/editor/controls/base.js"), TagsBehavior = __webpack_require__(/*! elementor-dynamic-tags/control-behavior */ "../assets/dev/js/editor/components/dynamic-tags/control-behavior.js"), Validator = __webpack_require__(/*! elementor-validator/base */ "../assets/dev/js/editor/components/validator/base.js"), NumberValidator = __webpack_require__(/*! elementor-validator/number */ "../assets/dev/js/editor/components/validator/number.js"), ControlBaseDataView; ControlBaseDataView = ControlBaseView.extend({ validatorTypes: { Base: Validator, Number: NumberValidator, Breakpoint: _breakpoint.default }, ui: function ui() { var ui = ControlBaseView.prototype.ui.apply(this, arguments); _.extend(ui, { input: 'input[data-setting][type!="checkbox"][type!="radio"]', checkbox: 'input[data-setting][type="checkbox"]', radio: 'input[data-setting][type="radio"]', select: 'select[data-setting]', textarea: 'textarea[data-setting]', responsiveSwitchersSibling: "".concat(ui.controlTitle, "[data-e-responsive-switcher-sibling!=\"false\"]"), responsiveSwitchers: '.elementor-responsive-switcher', contentEditable: '[contenteditable="true"]' }); return ui; }, templateHelpers: function templateHelpers() { var controlData = ControlBaseView.prototype.templateHelpers.apply(this, arguments); controlData.data.controlValue = this.getControlValue(); return controlData; }, events: function events() { return { 'input @ui.input': 'onBaseInputTextChange', 'change @ui.checkbox': 'onBaseInputChange', 'change @ui.radio': 'onBaseInputChange', 'input @ui.textarea': 'onBaseInputTextChange', 'change @ui.select': 'onBaseInputChange', 'input @ui.contentEditable': 'onBaseInputTextChange', 'click @ui.responsiveSwitchers': 'onResponsiveSwitchersClick' }; }, behaviors: function behaviors() { var behaviors = ControlBaseView.prototype.behaviors.apply(this, arguments), dynamicSettings = this.options.model.get('dynamic'); if (dynamicSettings && dynamicSettings.active) { var tags = _.filter(elementor.dynamicTags.getConfig('tags'), function (tag) { return tag.editable && _.intersection(tag.categories, dynamicSettings.categories).length; }); if (tags.length || elementor.config.user.is_administrator) { behaviors.tags = { behaviorClass: TagsBehavior, tags: tags, dynamicSettings: dynamicSettings }; } } return behaviors; }, initialize: function initialize() { ControlBaseView.prototype.initialize.apply(this, arguments); this.registerValidators(); if (this.model.get('responsive')) { this.setPlaceholderFromParent(); } if (undefined === this.model.get('inherit_placeholders')) { this.model.set('inherit_placeholders', true); } // TODO: this.elementSettingsModel is deprecated since 2.8.0. var settings = this.container ? this.container.settings : this.elementSettingsModel; this.listenTo(settings, 'change:external:' + this.model.get('name'), this.onAfterExternalChange); }, getControlValue: function getControlValue() { return this.container.settings.get(this.model.get('name')); }, getGlobalKey: function getGlobalKey() { return this.container.globals.get(this.model.get('name')); }, getGlobalValue: function getGlobalValue() { return this.globalValue; }, getGlobalDefault: function getGlobalDefault() { var controlGlobalArgs = this.model.get('global'); if (controlGlobalArgs !== null && controlGlobalArgs !== void 0 && controlGlobalArgs.default) { // If the control is a color/typography control and default colors/typography are disabled, don't return the global value. if (!elementor.config.globals.defaults_enabled[this.getGlobalMeta().controlType]) { return ''; } var _$e$data$commandExtra = $e.data.commandExtractArgs(controlGlobalArgs.default), command = _$e$data$commandExtra.command, args = _$e$data$commandExtra.args, result = $e.data.getCache($e.components.get('globals'), command, args.query); return result === null || result === void 0 ? void 0 : result.value; } // No global default. return ''; }, getCurrentValue: function getCurrentValue() { if (this.getGlobalKey() && !this.globalValue) { return ''; } if (this.globalValue) { return this.globalValue; } var controlValue = this.getControlValue(); if (controlValue) { return controlValue; } return this.getGlobalDefault(); }, isGlobalActive: function isGlobalActive() { var _this$options$model$g; return (_this$options$model$g = this.options.model.get('global')) === null || _this$options$model$g === void 0 ? void 0 : _this$options$model$g.active; }, setValue: function setValue(value) { this.setSettingsModel(value); }, setSettingsModel: function setSettingsModel(value) { var key = this.model.get('name'); $e.run('document/elements/settings', { container: this.options.container, settings: (0, _defineProperty2.default)({}, key, value) }); this.triggerMethod('settings:change'); }, applySavedValue: function applySavedValue() { this.setInputValue('[data-setting="' + this.model.get('name') + '"]', this.getControlValue()); }, getEditSettings: function getEditSettings(setting) { var settings = this.getOption('elementEditSettings').toJSON(); if (setting) { return settings[setting]; } return settings; }, setEditSetting: function setEditSetting(settingKey, settingValue) { var settings = this.getOption('elementEditSettings') || this.getOption('container').settings; settings.set(settingKey, settingValue); }, /** * Get the placeholder for the current control. * * @return {*} placeholder */ getControlPlaceholder: function getControlPlaceholder() { var placeholder = this.model.get('placeholder'); if (this.model.get('responsive') && this.model.get('inherit_placeholders')) { placeholder = placeholder || this.container.placeholders[this.model.get('name')]; } return placeholder; }, /** * Get the responsive parent view if exists. * * @return {ControlBaseDataView|undefined} responsive parent view if exists */ getResponsiveParentView: function getResponsiveParentView() { var parent = this.model.get('parent'); try { return parent && this.container.panel.getControlView(parent); // eslint-disable-next-line no-empty } catch (e) {} }, /** * Get the responsive children views if exists. * * @return {ControlBaseDataView|null} responsive children views if exists */ getResponsiveChildrenViews: function getResponsiveChildrenViews() { var children = this.model.get('inheritors'), views = []; try { var _iterator = _createForOfIteratorHelper(children), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var child = _step.value; views.push(this.container.panel.getControlView(child)); } // eslint-disable-next-line no-empty } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } catch (e) {} return views; }, /** * Get prepared placeholder from the responsive parent, and put it into current * control model as placeholder. */ setPlaceholderFromParent: function setPlaceholderFromParent() { var parent = this.getResponsiveParentView(); if (parent) { this.container.placeholders[this.model.get('name')] = parent.preparePlaceholderForChildren(); } }, /** * Returns the value of the current control if exists, or the parent value if not, * so responsive children can set it as their placeholder. When there are multiple * inputs, the inputs which are empty on this control will inherit their values * from the responsive parent. * For example, if on desktop the padding of all edges is 10, and on tablet only * padding right and left is set to 15, the mobile control placeholder will * eventually be: { top: 10, right: 15, left: 15, bottom: 10 }, because of the * inheritance of multiple values. * * @return {*} value of the current control if exists, or the parent value if not */ preparePlaceholderForChildren: function preparePlaceholderForChildren() { var _this$getResponsivePa; var cleanValue = this.getCleanControlValue(), parentValue = (_this$getResponsivePa = this.getResponsiveParentView()) === null || _this$getResponsivePa === void 0 ? void 0 : _this$getResponsivePa.preparePlaceholderForChildren(); if (cleanValue instanceof Object) { return Object.assign({}, parentValue, cleanValue); } return cleanValue || parentValue; }, /** * Start the re-rendering recursive chain from the responsive child of this * control. It's useful when the current control value is changed and we want * to update all responsive children. In this case, the re-rendering is supposed * to be applied only from the responsive child of this control and on. */ propagatePlaceholder: function propagatePlaceholder() { var children = this.getResponsiveChildrenViews(); var _iterator2 = _createForOfIteratorHelper(children), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var child = _step2.value; child.renderWithChildren(); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } }, /** * Re-render current control and trigger this method on the responsive child. * The purpose of those actions is to recursively re-render all responsive * children. */ renderWithChildren: function renderWithChildren() { this.render(); this.propagatePlaceholder(); }, /** * Get control value without empty properties, and without default values. * * @return {{}} control value without empty properties, and without default values */ getCleanControlValue: function getCleanControlValue() { var value = this.getControlValue(); return value && value !== this.model.get('default') ? value : undefined; }, onAfterChange: function onAfterChange(control) { if (Object.keys(control.changed).includes(this.model.get('name'))) { this.propagatePlaceholder(); } ControlBaseView.prototype.onAfterChange.apply(this, arguments); }, getInputValue: function getInputValue(input) { var $input = this.$(input); if ($input.is('[contenteditable="true"]')) { return $input.html(); } var inputValue = $input.val(), inputType = $input.attr('type'); if (-1 !== ['radio', 'checkbox'].indexOf(inputType)) { return $input.prop('checked') ? inputValue : ''; } if ('number' === inputType && _.isFinite(inputValue)) { return +inputValue; } // Temp fix for jQuery (< 3.0) that return null instead of empty array if ('SELECT' === input.tagName && $input.prop('multiple') && null === inputValue) { inputValue = []; } return inputValue; }, setInputValue: function setInputValue(input, value) { var $input = this.$(input), inputType = $input.attr('type'); if ('checkbox' === inputType) { $input.prop('checked', !!value); } else if ('radio' === inputType) { $input.filter('[value="' + value + '"]').prop('checked', true); } else { $input.val(value); } }, addValidator: function addValidator(validator) { this.validators.push(validator); }, registerValidators: function registerValidators() { var _this = this; this.validators = []; var validationTerms = {}; if (this.model.get('required')) { validationTerms.required = true; } if (!jQuery.isEmptyObject(validationTerms)) { this.addValidator(new this.validatorTypes.Base({ validationTerms: validationTerms })); } var validators = this.model.get('validators'); if (validators) { Object.entries(validators).forEach(function (_ref) { var _ref2 = (0, _slicedToArray2.default)(_ref, 2), key = _ref2[0], args = _ref2[1]; _this.addValidator(new _this.validatorTypes[key]({ validationTerms: args })); }); } }, onBeforeRender: function onBeforeRender() { this.setPlaceholderFromParent(); }, onRender: function onRender() { ControlBaseView.prototype.onRender.apply(this, arguments); if (this.model.get('responsive')) { this.renderResponsiveSwitchers(); } this.applySavedValue(); this.triggerMethod('ready'); this.toggleControlVisibility(); this.addTooltip(); }, onBaseInputTextChange: function onBaseInputTextChange(event) { this.onBaseInputChange(event); }, onBaseInputChange: function onBaseInputChange(event) { clearTimeout(this.correctionTimeout); var input = event.currentTarget, value = this.getInputValue(input), validators = this.validators.slice(0), settingsValidators = this.container.settings.validators[this.model.get('name')]; if (settingsValidators) { validators = validators.concat(settingsValidators); } if (validators) { var oldValue = this.getControlValue(input.dataset.setting); var isValidValue = validators.every(function (validator) { return validator.isValid(value, oldValue); }); if (!isValidValue) { this.correctionTimeout = setTimeout(this.setInputValue.bind(this, input, oldValue), 1200); return; } } this.updateElementModel(value, input); this.triggerMethod('input:change', event); }, onResponsiveSwitchersClick: function onResponsiveSwitchersClick(event) { var $switcher = jQuery(event.currentTarget), device = $switcher.data('device'), $switchersWrapper = this.ui.responsiveSwitchersWrapper, selectedOption = $switcher.index(); $switchersWrapper.toggleClass('elementor-responsive-switchers-open'); $switchersWrapper[0].style.setProperty('--selected-option', selectedOption); this.triggerMethod('responsive:switcher:click', device); elementor.changeDeviceMode(device); }, renderResponsiveSwitchers: function renderResponsiveSwitchers() { var templateHtml = Marionette.Renderer.render('#tmpl-elementor-control-responsive-switchers', this.model.attributes); this.ui.responsiveSwitchersSibling.after(templateHtml); this.ui.responsiveSwitchersWrapper = this.$el.find('.elementor-control-responsive-switchers'); }, onAfterExternalChange: function onAfterExternalChange() { this.hideTooltip(); this.applySavedValue(); }, addTooltip: function addTooltip() { this.ui.tooltipTargets = this.$el.find('.tooltip-target'); if (!this.ui.tooltipTargets.length) { return; } // Create tooltip on controls this.ui.tooltipTargets.tipsy({ gravity: function gravity() { // `n` for down, `s` for up var gravity = jQuery(this).data('tooltip-pos'); if (undefined !== gravity) { return gravity; } return 's'; }, title: function title() { return this.getAttribute('data-tooltip'); } }); }, hideTooltip: function hideTooltip() { if (this.ui.tooltipTargets.length) { this.ui.tooltipTargets.tipsy('hide'); } }, updateElementModel: function updateElementModel(value) { this.setValue(value); } }, { // Static methods getStyleValue: function getStyleValue(placeholder, controlValue, controlData) { if ('DEFAULT' === placeholder) { return controlData.default; } return controlValue; }, onPasteStyle: function onPasteStyle() { return true; } }); module.exports = ControlBaseDataView; /***/ }), /***/ "../assets/dev/js/editor/controls/base.js": /*!************************************************!*\ !*** ../assets/dev/js/editor/controls/base.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var ControlBaseView; ControlBaseView = Marionette.CompositeView.extend({ ui: function ui() { return { controlTitle: '.elementor-control-title' }; }, behaviors: function behaviors() { var behaviors = {}; return elementor.hooks.applyFilters('controls/base/behaviors', behaviors, this); }, getBehavior: function getBehavior(name) { return this._behaviors[Object.keys(this.behaviors()).indexOf(name)]; }, className: function className() { // TODO: Any better classes for that? var classes = 'elementor-control elementor-control-' + this.model.get('name') + ' elementor-control-type-' + this.model.get('type'), modelClasses = this.model.get('classes'), responsive = this.model.get('responsive'); if (!_.isEmpty(modelClasses)) { classes += ' ' + modelClasses; } if (!_.isEmpty(responsive)) { var responsiveControlName = responsive.max || responsive.min; classes += ' elementor-control-responsive-' + responsiveControlName; } return classes; }, templateHelpers: function templateHelpers() { var controlData = { _cid: this.model.cid }; return { view: this, data: _.extend({}, this.model.toJSON(), controlData) }; }, getTemplate: function getTemplate() { return Marionette.TemplateCache.get('#tmpl-elementor-control-' + this.model.get('type') + '-content'); }, initialize: function initialize(options) { var label = this.model.get('label'); // TODO: Temp backwards compatibility. since 2.8.0. Object.defineProperty(this, 'container', { get: function get() { if (!options.container) { var settingsModel = options.elementSettingsModel, view = $e.components.get('document').utils.findViewById(settingsModel.id); // Element control. if (view && view.getContainer) { options.container = view.getContainer(); } else { if (!settingsModel.id) { settingsModel.id = 'bc-' + elementorCommon.helpers.getUniqueId(); } // Document/General/Other control. options.container = new elementorModules.editor.Container({ type: 'bc-container', id: settingsModel.id, model: settingsModel, settings: settingsModel, label: label, view: false, parent: false, renderer: false, controls: settingsModel.options.controls }); } } return options.container; } }); // Use `defineProperty` because `get elementSettingsModel()` fails during the `Marionette.CompositeView.extend`. Object.defineProperty(this, 'elementSettingsModel', { get: function get() { elementorDevTools.deprecation.deprecated('elementSettingsModel', '2.8.0', 'container.settings'); return options.container ? options.container.settings : options.elementSettingsModel; } }); var controlType = this.model.get('type'), controlSettings = jQuery.extend(true, {}, elementor.config.controls[controlType], this.model.attributes); this.model.set(controlSettings); // TODO: this.elementSettingsModel is deprecated since 2.8.0. var settings = this.container ? this.container.settings : this.elementSettingsModel; this.listenTo(settings, 'change', this.onAfterChange); if (this.model.attributes.responsive) { this.onDeviceModeChange = this.onDeviceModeChange.bind(this); elementor.listenTo(elementor.channels.deviceMode, 'change', this.onDeviceModeChange); } }, onDestroy: function onDestroy() { elementor.stopListening(elementor.channels.deviceMode, 'change', this.onDeviceModeChange); }, onDeviceModeChange: function onDeviceModeChange() { this.toggleControlVisibility(); }, onAfterChange: function onAfterChange() { this.toggleControlVisibility(); }, toggleControlVisibility: function toggleControlVisibility() { // TODO: this.elementSettingsModel is deprecated since 2.8.0. var settings = this.container ? this.container.settings : this.elementSettingsModel; var isVisible = elementor.helpers.isActiveControl(this.model, settings.attributes, settings.controls); this.$el.toggleClass('elementor-hidden-control', !isVisible); elementor.getPanelView().updateScrollbar(); }, onRender: function onRender() { var layoutType = this.model.get('label_block') ? 'block' : 'inline', showLabel = this.model.get('show_label'), elClasses = 'elementor-label-' + layoutType; elClasses += ' elementor-control-separator-' + this.model.get('separator'); if (!showLabel) { elClasses += ' elementor-control-hidden-label'; } this.$el.addClass(elClasses); this.toggleControlVisibility(); }, reRoute: function reRoute(controlActive) { $e.route($e.routes.getCurrent('panel'), this.getControlInRouteArgs(controlActive ? this.getControlPath() : ''), { history: false }); }, getControlInRouteArgs: function getControlInRouteArgs(path) { return _objectSpread(_objectSpread({}, $e.routes.getCurrentArgs('panel')), {}, { activeControl: path }); }, getControlPath: function getControlPath() { var controlPath = this.model.get('name'), parent = this._parent; while (!parent.$el.hasClass('elementor-controls-stack')) { var parentName = parent.model.get('name') || parent.model.get('_id'); controlPath = parentName + '/' + controlPath; parent = parent._parent; } return controlPath; } }); module.exports = ControlBaseView; /***/ }), /***/ "../modules/promotions/assets/js/react/app-manager.js": /*!************************************************************!*\ !*** ../modules/promotions/assets/js/react/app-manager.js ***! \************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AppManager = void 0; var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var _app = _interopRequireDefault(__webpack_require__(/*! ./app */ "../modules/promotions/assets/js/react/app.js")); var _client = __webpack_require__(/*! react-dom/client */ "../node_modules/react-dom/client.js"); var AppManager = exports.AppManager = /*#__PURE__*/function () { function AppManager() { (0, _classCallCheck2.default)(this, AppManager); this.promotionInfoTip = null; this.atomicFormPromotionWrapper = null; this.onRoute = function () {}; this.attachAtomicFormListeners(); } return (0, _createClass2.default)(AppManager, [{ key: "getPromotionData", value: function getPromotionData(promotionType) { return elementorPromotionsData[promotionType] || {}; } }, { key: "getAtomicFormPromotionData", value: function getAtomicFormPromotionData() { var _elementor; return ((_elementor = elementor) === null || _elementor === void 0 || (_elementor = _elementor.config) === null || _elementor === void 0 ? void 0 : _elementor.atomicFormPromotion) || {}; } }, { key: "mount", value: function mount(targetNode, selectors) { var _elementor2, _elementor2$getPrefer, _rootElement$getAttri, _this = this; if (this.promotionInfoTip) { return; } var wrapperElement = targetNode === null || targetNode === void 0 ? void 0 : targetNode.closest(selectors.wrapperElement); var rootElement = wrapperElement === null || wrapperElement === void 0 ? void 0 : wrapperElement.querySelector(selectors.reactAnchor); if (!rootElement) { return; } this.attachEditorEventListeners(); this.promotionInfoTip = (0, _client.createRoot)(rootElement); var colorScheme = ((_elementor2 = elementor) === null || _elementor2 === void 0 || (_elementor2$getPrefer = _elementor2.getPreferences) === null || _elementor2$getPrefer === void 0 ? void 0 : _elementor2$getPrefer.call(_elementor2, 'ui_theme')) || 'auto'; var isRTL = elementorCommon.config.isRTL; var promotionType = (_rootElement$getAttri = rootElement.getAttribute('data-promotion')) === null || _rootElement$getAttri === void 0 ? void 0 : _rootElement$getAttri.replace('_promotion', ''); this.promotionInfoTip.render(/*#__PURE__*/_react.default.createElement(_app.default, { colorScheme: colorScheme, isRTL: isRTL, promotionsData: this.getPromotionData(promotionType), onClose: function onClose() { return _this.unmount(); } })); } }, { key: "mountAtomicFormPromotion", value: function mountAtomicFormPromotion(targetEl, ctaUrl) { var _elementor3, _elementor3$getPrefer, _this2 = this; this.unmount(); this.atomicFormPromotionWrapper = document.createElement('span'); this.atomicFormPromotionWrapper.className = 'e-atomic-form-promotion-wrapper'; targetEl.appendChild(this.atomicFormPromotionWrapper); this.attachEditorEventListeners(); var colorScheme = ((_elementor3 = elementor) === null || _elementor3 === void 0 || (_elementor3$getPrefer = _elementor3.getPreferences) === null || _elementor3$getPrefer === void 0 ? void 0 : _elementor3$getPrefer.call(_elementor3, 'ui_theme')) || 'auto'; var isRTL = elementorCommon.config.isRTL; var promotionData = this.getAtomicFormPromotionData(); this.promotionInfoTip = (0, _client.createRoot)(this.atomicFormPromotionWrapper); this.promotionInfoTip.render(/*#__PURE__*/_react.default.createElement(_app.default, { colorScheme: colorScheme, isRTL: isRTL, cardType: "atomicForm", promotionData: promotionData, ctaUrl: ctaUrl, doClose: function doClose() { return _this2.unmount(); } })); } }, { key: "attachAtomicFormListeners", value: function attachAtomicFormListeners() { var _this3 = this; document.addEventListener('atomic-form-promotion:open', function (event) { var promotionData = _this3.getAtomicFormPromotionData(); _this3.mountAtomicFormPromotion(event.detail.target, promotionData.widgetCtaUrl); }); } }, { key: "unmount", value: function unmount() { if (this.promotionInfoTip) { this.detachEditorEventListeners(); this.promotionInfoTip.unmount(); } if (this.atomicFormPromotionWrapper && this.atomicFormPromotionWrapper.parentNode) { this.atomicFormPromotionWrapper.parentNode.removeChild(this.atomicFormPromotionWrapper); } this.promotionInfoTip = null; this.atomicFormPromotionWrapper = null; } }, { key: "attachEditorEventListeners", value: function attachEditorEventListeners() { var _this4 = this; this.onRoute = function (component, route) { if (route !== 'panel/elements/categories' && route !== 'panel/editor/content') { return; } _this4.unmount(); }; $e.routes.on('run:after', this.onRoute); } }, { key: "detachEditorEventListeners", value: function detachEditorEventListeners() { $e.routes.off('run:after', this.onRoute); } }]); }(); /***/ }), /***/ "../modules/promotions/assets/js/react/app.js": /*!****************************************************!*\ !*** ../modules/promotions/assets/js/react/app.js ***! \****************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"); var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); var _atomicFormPromotionCard = _interopRequireDefault(__webpack_require__(/*! ./components/atomic-form-promotion-card */ "../modules/promotions/assets/js/react/components/atomic-form-promotion-card.js")); var _promotionCard = _interopRequireDefault(__webpack_require__(/*! ./components/promotion-card */ "../modules/promotions/assets/js/react/components/promotion-card.js")); var App = function App(props) { var cardContent = 'atomicForm' === props.cardType ? /*#__PURE__*/_react.default.createElement(_atomicFormPromotionCard.default, { doClose: props.doClose, promotionData: props.promotionData, ctaUrl: props.ctaUrl }) : /*#__PURE__*/_react.default.createElement(_promotionCard.default, { doClose: props.onClose, promotionsData: props.promotionsData }); return /*#__PURE__*/_react.default.createElement(_ui.DirectionProvider, { rtl: props.isRTL }, /*#__PURE__*/_react.default.createElement(_ui.LocalizationProvider, null, /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, { colorScheme: props.colorScheme }, /*#__PURE__*/_react.default.createElement(_ui.Infotip, { content: cardContent, placement: "right", arrow: true, open: true, disableHoverListener: true, PopperProps: { modifiers: [{ name: 'offset', options: { offset: [-24, 8] } }] } }, /*#__PURE__*/_react.default.createElement("span", null))))); }; App.propTypes = { colorScheme: PropTypes.oneOf(['auto', 'light', 'dark']), isRTL: PropTypes.bool, cardType: PropTypes.string, promotionsData: PropTypes.object, promotionData: PropTypes.object, ctaUrl: PropTypes.string, doClose: PropTypes.func, onClose: PropTypes.func }; var _default = exports["default"] = App; /***/ }), /***/ "../modules/promotions/assets/js/react/assets/atomic-form-animation.json": /*!*******************************************************************************!*\ !*** ../modules/promotions/assets/js/react/assets/atomic-form-animation.json ***! \*******************************************************************************/ /***/ ((module) => { "use strict"; module.exports = /*#__PURE__*/JSON.parse('{"v":"5.7.5","fr":100,"ip":0,"op":876,"w":296,"h":148,"ddd":0,"assets":[{"id":"0","layers":[{"ddd":0,"refId":"g","w":1184,"h":592,"ind":1,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[113,57],"ix":2},"a":{"a":0,"k":[592,296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":868,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":884,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"g","layers":[{"ddd":0,"ind":29,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":668,"s":[74,74],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":676,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"h","w":80,"h":78,"ind":30,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-19,-14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":29},{"ddd":0,"ind":31,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"i","w":346,"h":58,"ind":32,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":31},{"ddd":0,"refId":"j","w":626,"h":239,"ind":33,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[279,120],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":34,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.82,1,0.71],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":540,"s":[592,296],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[592,396],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":600,"s":[592,396],"h":1},{"t":620,"s":[592,347],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":540,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":560,"s":[373,373],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":35,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.012,0.18,0.193],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"k","ind":36,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"l","layers":[{"ddd":0,"refId":"m","w":344,"h":54,"ind":37,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":38,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[80,78],"ix":2},"p":{"a":0,"k":[21,25],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"h","layers":[{"ddd":0,"ind":39,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"l","w":80,"h":78,"ind":30,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,25],"ix":2},"a":{"a":0,"k":[21,25],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"m","layers":[{"ddd":0,"ind":40,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":41,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":42,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":43,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"n","layers":[{"ddd":0,"refId":"o","w":344,"h":54,"ind":44,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":45,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[64,60],"ix":2},"p":{"a":0,"k":[29,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"i","layers":[{"ddd":0,"ind":46,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"n","w":346,"h":58,"ind":32,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"o","layers":[{"ddd":0,"ind":47,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":48,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":49,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":50,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":644,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"j","layers":[{"ddd":0,"ind":33,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":540,"s":[313,176],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[313,76],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":600,"s":[313,76],"h":1},{"t":620,"s":[313,27],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":540,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":560,"s":[446,446],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":584,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":51,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":33},{"ddd":0,"refId":"p","w":24,"h":8,"ind":52,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":51},{"ddd":0,"ind":53,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":33,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.82,1,0.71],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"p","layers":[{"ddd":0,"ind":54,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"k","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"1","layers":[{"ddd":0,"ind":55,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"q","w":346,"h":58,"ind":56,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":55},{"ddd":0,"ind":57,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[454.77,347.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":536,"s":[74,74],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":544,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"r","w":80,"h":78,"ind":58,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-19,-14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":57},{"ddd":0,"refId":"s","w":626,"h":239,"ind":59,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[279,120],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":60,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.8,0.86,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":424,"s":[592,296],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[592,396],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":484,"s":[592,396],"h":1},{"t":504,"s":[592,347],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":424,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":444,"s":[373,373],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":61,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.01,0.004,0.232],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"t","ind":62,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[592,296],"ix":2},"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":820,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"u","layers":[{"ddd":0,"refId":"v","w":344,"h":54,"ind":63,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":64,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[64,60],"ix":2},"p":{"a":0,"k":[29,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"q","layers":[{"ddd":0,"ind":65,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"u","w":346,"h":58,"ind":56,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"v","layers":[{"ddd":0,"ind":66,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":67,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":68,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":69,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"w","layers":[{"ddd":0,"refId":"x","w":344,"h":54,"ind":70,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":71,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[80,78],"ix":2},"p":{"a":0,"k":[21,25],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"r","layers":[{"ddd":0,"ind":72,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[19,14],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[60.87,-13.86],[-18.99,-13.86],[-18.99,63.49],[60.87,63.49],[60.87,-13.86]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"w","w":80,"h":78,"ind":58,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,25],"ix":2},"a":{"a":0,"k":[21,25],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"x","layers":[{"ddd":0,"ind":73,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":74,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":75,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":76,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"s","layers":[{"ddd":0,"ind":59,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":424,"s":[313,176],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[313,76],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":484,"s":[313,76],"h":1},{"t":504,"s":[313,27],"h":1}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":1,"k":[{"t":424,"s":[399,399],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":444,"s":[446,446],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":468,"s":[399,399]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":77,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":59},{"ddd":0,"refId":"y","w":24,"h":8,"ind":78,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":77},{"ddd":0,"ind":79,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":59,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0.8,0.86,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"y","layers":[{"ddd":0,"ind":80,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"t","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"2","layers":[{"ddd":0,"refId":"z","ind":3,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[653.5,533.5],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":716,"s":[0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":764,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]}},{"t":868,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":884,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"z","u":"","p":"data:image/png;base64,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8z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z78z7YAAP76WgAAAAAhAv9TSArcPg+8ZFeuS5te5QitGWKMuFCzmSzN/CFDE0o9GLtt465CWR6JBFj7yYtwh7N3BtG8lMl2AFtfysauWruqxNu9VxwU2itUFdYjIB5OyFSK0cb4lTcJOUxf/ml70n6bnZRTkQnZC4/U6XPXwA/xjnQ82RipjdvlsVTD1TpRJKp6WsFvGtNXYFmBFG7sX5R2lTRfnO0W83OfuXAtcTwoix4mvGtpsMi6aMpCn3byeTwf3JCLNon5cZm7YwYABA/IOu9zm8Dsk8QdbY2erIiNmWNtb4KY7dI6nrmg8g+HmMP3ObRWQo1xEdzS6GD0J+VFCvM+B/7Z1BR8JnyDbRO85y/ak+56/+vlCZmyMoUgwupiyh08vEeoYE2v/rNQzHfLtBdVfgYzPWH4dPuwXlH/5jfTpIVjZWqXCt5brghstH9e2Wke68drY0VlWE4tjoc5LW5DWrECO65cMzBIVIR/znfHqQoWiLD1q6q4ae55Vb952kY6MIr2R1teq6JPwvPWfPB+/xCkdLF4rhsTEaaVXf6Tkvsp1kGpAAjRR5SwsrQkojf6BVyZAJTUi8bCXitzaigQ4XHgu4ruLWlsv6+kFFczxE4r8FJmHRKD/hF7aM31Do7BXTtmK4gUGYteEw1/7Y33FrvETEygALLMw/r/mMBc9HHKk8RP5rSa6Vntb5Cc5pnMf6nuXQvFIInBXT0/bAk9fDEcGvYHCYqm9zsj6lwDEdkVaSA/AUpnTun5rmAmTrkpP23X2i9PiYpOQCakJCS6gZeSNiz6vZvxc4xp+RVdUyaOp2kTBoNRsq6Yv7zWx6zJPNJpXCu0d+nLvj8gjkOQzJc+7g8d9/49lWBPalK1pOs6IvvmZRvEmt6eIMVy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","w":1307,"h":1067,"e":1},{"id":"3","layers":[{"ddd":0,"refId":"A","ind":4,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[653.5,533.5],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":592,"s":[0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":628,"s":[100],"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]}},{"t":716,"s":[100],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":764,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"A","u":"","p":"data:image/png;base64,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","w":1307,"h":1067,"e":1},{"id":"B","layers":[{"ddd":0,"refId":"C","w":344,"h":54,"ind":81,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1},{"t":604,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":82,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[78,60],"ix":2},"p":{"a":0,"k":[36,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"4","layers":[{"ddd":0,"ind":83,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[2,2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[74.01,-31.72],[-31.26,-31.72],[-31.26,75],[74.01,75],[74.01,-31.72]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"B","w":346,"h":58,"ind":7,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[171,27],"ix":2},"a":{"a":0,"k":[171,27],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"C","layers":[{"ddd":0,"ind":84,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":85,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":86,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":87,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"D","layers":[{"ddd":0,"refId":"E","w":344,"h":54,"ind":88,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":512,"s":[100],"h":1},{"t":604,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":89,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[107,108],"ix":2},"p":{"a":0,"k":[21.5,22],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"5","layers":[{"ddd":0,"ind":90,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[32,32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[74.01,-31.72],[-31.26,-31.72],[-31.26,75],[74.01,75],[74.01,-31.72]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"D","w":107,"h":108,"ind":9,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21.5,22],"ix":2},"a":{"a":0,"k":[21.5,22],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"E","layers":[{"ddd":0,"ind":91,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-17.45,0],[-4.76,15.87],[17.45,-15.87]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":5.5,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[26.46,27.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":92,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.1,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":93,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":94,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":488,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"F","layers":[{"ddd":0,"refId":"G","w":344,"h":54,"ind":95,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1},{"t":512,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":96,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[69,54],"ix":2},"p":{"a":0,"k":[32.5,27],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"6","layers":[{"ddd":0,"ind":97,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[66.55,-14.39],[-24.84,-14.39],[-24.84,67.77],[66.55,67.77],[66.55,-14.39]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"F","w":343,"h":53,"ind":12,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[172.5,26.5],"ix":2},"a":{"a":0,"k":[172.5,26.5],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":2}]},{"id":"G","layers":[{"ddd":0,"refId":"H","w":266,"h":29,"ind":98,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[78,13],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":99,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"H","layers":[{"ddd":0,"ind":100,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-182,189],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"I","w":266,"h":29,"ind":98,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[182,-189],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":100}]},{"id":"I","layers":[{"ddd":0,"ind":101,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-182,189],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"J","layers":[{"ddd":0,"refId":"K","w":344,"h":54,"ind":102,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1},{"t":512,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":103,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":0,"k":[92,83],"ix":2},"p":{"a":0,"k":[21,26.5],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":0,"ix":2},"r":1,"bm":0}],"ip":0,"op":877,"st":0}]},{"id":"7","layers":[{"ddd":0,"ind":104,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[25,15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"td":1,"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[66.55,-14.39],[-24.84,-14.39],[-24.84,67.77],[66.55,67.77],[66.55,-14.39]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"J","w":92,"h":83,"ind":14,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[21,26.5],"ix":2},"a":{"a":0,"k":[21,26.5],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"tt":1}]},{"id":"K","layers":[{"ddd":0,"refId":"L","w":0,"h":0,"ind":105,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":106,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":448,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-22.7,-24.7],[22.7,-24.7],[24.7,-22.7],[24.7,22.7],[22.7,24.7],[-22.7,24.7],[-24.7,22.7],[-24.7,-22.7],[-22.7,-24.7]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":0.7,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[27.24,26.8],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"L","layers":[{"ddd":0,"refId":"M","w":0,"h":0,"ind":105,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-104,202],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"M","layers":[{"ddd":0,"ind":107,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[432.63,-160.38],[428.36,-160.38],[435.56,-170.78],[428.92,-180.3],[433.3,-180.3],[437.73,-173.9],[442.16,-180.3],[446.51,-180.3],[439.9,-170.82],[447.1,-160.38],[442.79,-160.38],[437.73,-167.69],[432.63,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-163.43],[423.65,-170.34],[417.32,-177.26],[410.96,-170.34],[417.32,-163.43]],"i":[[0,0],[0,4.071],[3.755,0],[0,-4.071],[-3.795,0]],"o":[[3.755,0],[0,-4.071],[-3.795,0],[0,4.071],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[417.32,-160.07],[407.05,-170.34],[417.32,-180.62],[427.56,-170.34],[417.32,-160.07]],"i":[[0,0],[0,5.969],[-5.969,0],[0,-5.969],[5.969,0]],"o":[[-5.969,0],[0,-5.969],[5.969,0],[0,5.969],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.02,-163.43],[400.15,-170.34],[394.02,-177.26],[387.9,-170.34],[394.02,-163.43]],"i":[[0,0],[0,4.15],[3.676,0],[0,-4.15],[-3.676,0]],"o":[[3.676,0],[0,-4.15],[-3.676,0],[0,4.15],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394.62,-160.07],[388.21,-163.35],[388.21,-160.38],[384.38,-160.38],[384.38,-188.65],[388.21,-188.65],[388.21,-177.38],[394.58,-180.62],[404.02,-170.34],[394.62,-160.07]],"i":[[0,0],[1.186,1.976],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.648,0],[0,-5.89],[5.969,0]],"o":[[-2.688,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.225,-1.976],[6.008,0],[0,5.89],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[363.38,-160.07],[355.36,-166.87],[358.87,-166.87],[363.34,-163.19],[367.25,-166.11],[355.87,-174.69],[362.98,-180.62],[370.69,-174.41],[367.17,-174.41],[363.02,-177.62],[359.43,-174.85],[370.85,-166.31],[363.38,-160.07]],"i":[[0,0],[0.316,4.309],[0,0],[-2.569,0],[0,1.779],[0,7.945],[-4.15,0],[-0.277,-3.874],[0,0],[2.293,0],[0,-1.779],[0,-8.301],[4.625,0]],"o":[[-4.822,0],[0,0],[0.198,2.293],[2.372,0],[0,-4.862],[0,-3.518],[4.625,0],[0,0],[-0.198,-1.937],[-1.976,0],[0,4.704],[0,3.834],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.16,-188.65],[351.43,-188.65],[351.43,-183.82],[347.16,-183.82],[347.16,-188.65]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[347.4,-160.38],[347.4,-180.3],[351.23,-180.3],[351.23,-160.38],[347.4,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[324.39,-160.38],[324.39,-188.65],[328.23,-188.65],[328.23,-176.79],[334.63,-180.62],[342.06,-172.64],[342.06,-160.38],[338.23,-160.38],[338.23,-171.88],[333.56,-177.18],[328.23,-171.17],[328.23,-160.38],[324.39,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.807,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[317.52,-160.38],[310.88,-166.9],[310.88,-176.98],[306.81,-176.98],[306.81,-180.3],[310.88,-180.3],[310.88,-186.55],[314.72,-186.55],[314.72,-180.3],[320.61,-180.3],[320.61,-176.98],[314.72,-176.98],[314.72,-167.02],[317.8,-163.7],[320.61,-163.7],[320.61,-160.38],[317.52,-160.38]],"i":[[0,0],[0,4.071],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.897,0],[0,0],[0,0],[0,0]],"o":[[-4.032,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.135],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.23,-160.38],[279.23,-188.65],[283.06,-188.65],[283.06,-172.32],[291.76,-180.3],[296.74,-180.3],[288.36,-172.52],[297.49,-160.38],[292.75,-160.38],[285.63,-169.95],[283.06,-167.58],[283.06,-160.38],[279.23,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[265.8,-160.07],[255.96,-170.34],[265.8,-180.62],[275.05,-173.35],[271.22,-173.35],[265.88,-177.26],[259.95,-170.34],[265.92,-163.43],[271.26,-167.1],[275.05,-167.1],[265.8,-160.07]],"i":[[0,0],[0,5.494],[-6.245,0],[-0.553,-4.506],[0,0],[2.727,0],[0,-3.834],[-3.953,0],[-0.632,2.253],[0,0],[5.099,0]],"o":[[-6.245,0],[0,-5.494],[4.664,0],[0,0],[-0.356,-2.253],[-3.953,0],[0,3.834],[2.727,0],[0,0],[-0.632,4.19],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[237.68,-172.6],[248.94,-172.6],[243.41,-177.54],[237.68,-172.6]],"i":[[0,0],[0,0],[3.281,0],[0.593,-3.241]],"o":[[0,0],[-0.237,-3.044],[-3.083,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[243.76,-160.07],[233.8,-170.46],[243.41,-180.62],[252.81,-171.17],[252.74,-169.63],[237.56,-169.63],[243.76,-163.35],[249.14,-166.87],[252.97,-166.87],[243.76,-160.07]],"i":[[0,0],[0,5.534],[-6.127,0],[0,-5.06],[0.04,-0.356],[0,0],[-3.439,0],[-0.553,2.253],[0,0],[4.941,0]],"o":[[-6.166,0],[0,-5.573],[6.127,0],[0,0.514],[0,0],[0.316,3.716],[2.925,0],[0,0],[-0.672,4.111],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[212.14,-160.38],[212.14,-188.65],[215.97,-188.65],[215.97,-176.79],[222.38,-180.62],[229.81,-172.64],[229.81,-160.38],[225.97,-160.38],[225.97,-171.88],[221.31,-177.18],[215.97,-171.17],[215.97,-160.38],[212.14,-160.38]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.965,0],[0,-4.743],[0,0],[0,0],[0,0],[2.806,0],[0,-3.478],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.067,-2.49],[4.506,0],[0,0],[0,0],[0,0],[0,-3.162],[-3.123,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[195.87,-160.07],[182.35,-174.22],[195.87,-188.37],[207.85,-179.16],[203.54,-179.16],[195.83,-184.73],[186.54,-174.22],[195.87,-163.7],[203.62,-169.28],[207.81,-169.28],[195.87,-160.07]],"i":[[0,0],[0,9.487],[-7.076,0],[-0.712,-5.376],[0,0],[3.992,0],[0,-6.838],[-5.415,0],[-0.435,3.241],[0,0],[6.364,0]],"o":[[-7.155,0],[0,-9.487],[6.245,0],[0,0],[-0.435,-3.241],[-5.376,0],[0,6.838],[4.071,0],[0,0],[-0.593,5.376],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"8","layers":[{"ddd":0,"refId":"N","w":45,"h":45,"ind":108,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[276,17],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":109,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[348.53,-181.7],[344.59,-181.7],[351.23,-191.29],[345.1,-200.08],[349.15,-200.08],[353.24,-194.17],[357.32,-200.08],[361.33,-200.08],[355.24,-191.32],[361.88,-181.7],[357.9,-181.7],[353.24,-188.44],[348.53,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[334.41,-184.51],[340.24,-190.89],[334.41,-197.27],[328.54,-190.89],[334.41,-184.51]],"i":[[0,0],[0,3.756],[3.464,0],[0,-3.756],[-3.501,0]],"o":[[3.464,0],[0,-3.756],[-3.501,0],[0,3.756],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[334.41,-181.41],[324.93,-190.89],[334.41,-200.37],[343.85,-190.89],[334.41,-181.41]],"i":[[0,0],[0,5.507],[-5.507,0],[0,-5.507],[5.507,0]],"o":[[-5.507,0],[0,-5.507],[5.507,0],[0,5.507],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[312.91,-184.51],[318.57,-190.89],[312.91,-197.27],[307.26,-190.89],[312.91,-184.51]],"i":[[0,0],[0,3.829],[3.391,0],[0,-3.829],[-3.391,0]],"o":[[3.391,0],[0,-3.829],[-3.391,0],[0,3.829],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[313.46,-181.41],[307.55,-184.43],[307.55,-181.7],[304.02,-181.7],[304.02,-207.77],[307.55,-207.77],[307.55,-197.38],[313.43,-200.37],[322.14,-190.89],[313.46,-181.41]],"i":[[0,0],[1.094,1.823],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.443,0],[0,-5.434],[5.507,0]],"o":[[-2.48,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.13,-1.823],[5.543,0],[0,5.433],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[284.82,-181.7],[284.82,-207.77],[288.36,-207.77],[288.36,-192.71],[296.38,-200.08],[300.98,-200.08],[293.25,-192.89],[301.67,-181.7],[297.29,-181.7],[290.73,-190.52],[288.36,-188.34],[288.36,-181.7],[284.82,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[272.44,-181.41],[263.36,-190.89],[272.44,-200.37],[280.97,-193.66],[277.43,-193.66],[272.51,-197.27],[267.04,-190.89],[272.55,-184.51],[277.47,-187.9],[280.97,-187.9],[272.44,-181.41]],"i":[[0,0],[0,5.069],[-5.762,0],[-0.511,-4.157],[0,0],[2.516,0],[0,-3.538],[-3.647,0],[-0.584,2.079],[0,0],[4.704,0]],"o":[[-5.762,0],[0,-5.069],[4.303,0],[0,0],[-0.329,-2.078],[-3.647,0],[0,3.537],[2.516,0],[0,0],[-0.584,3.866],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[246.49,-192.97],[256.88,-192.97],[251.77,-197.52],[246.49,-192.97]],"i":[[0,0],[0,0],[3.027,0],[0.547,-2.99]],"o":[[0,0],[-0.219,-2.808],[-2.844,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[252.1,-181.41],[242.91,-191],[251.77,-200.37],[260.45,-191.65],[260.38,-190.23],[246.38,-190.23],[252.1,-184.43],[257.06,-187.68],[260.6,-187.68],[252.1,-181.41]],"i":[[0,0],[0,5.105],[-5.652,0],[0,-4.668],[0.036,-0.329],[0,0],[-3.172,0],[-0.51,2.078],[0,0],[4.559,0]],"o":[[-5.689,0],[0,-5.142],[5.652,0],[0,0.474],[0,0],[0.292,3.428],[2.699,0],[0,0],[-0.62,3.792],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[222.93,-181.7],[222.93,-207.77],[226.47,-207.77],[226.47,-196.83],[232.37,-200.37],[239.23,-193],[239.23,-181.7],[235.69,-181.7],[235.69,-192.31],[231.39,-197.2],[226.47,-191.65],[226.47,-181.7],[222.93,-181.7]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.735,0],[0,-4.376],[0,0],[0,0],[0,0],[2.589,0],[0,-3.209],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.984,-2.297],[4.157,0],[0,0],[0,0],[0,0],[0,-2.918],[-2.881,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[207.92,-181.41],[195.45,-194.46],[207.92,-207.52],[218.97,-199.02],[214.99,-199.02],[207.88,-204.16],[199.31,-194.46],[207.92,-184.76],[215.07,-189.9],[218.93,-189.9],[207.92,-181.41]],"i":[[0,0],[0,8.752],[-6.528,0],[-0.656,-4.959],[0,0],[3.683,0],[0,-6.308],[-4.996,0],[-0.401,2.99],[0,0],[5.871,0]],"o":[[-6.6,0],[0,-8.752],[5.762,0],[0,0],[-0.401,-2.99],[-4.959,0],[0,6.309],[3.756,0],[0,0],[-0.547,4.959],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-109,370],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":110,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[307.4,-283.23],[307.4,-261.32],[305.26,-256.15],[300.1,-254.01],[256.27,-254.01],[251.11,-256.15],[248.97,-261.32],[248.97,-305.14],[251.11,-310.3],[256.27,-312.44],[289.14,-312.44]],"i":[[0,0],[0,0],[1.37,-1.37],[1.937,0],[0,0],[1.37,1.37],[0,1.937],[0,0],[-1.37,1.37],[-1.937,0],[0,0]],"o":[[0,0],[0,1.937],[-1.37,1.37],[0,0],[-1.937,0],[-1.37,-1.37],[0,0],[0,-1.937],[1.37,-1.37],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[267.23,-286.88],[278.19,-275.93],[307.4,-305.14]],"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[-109,370],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":111,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[338,237],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[169,118.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"N","layers":[{"ddd":0,"ind":108,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-385,353],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":112,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":108},{"ddd":0,"refId":"O","w":45,"h":45,"ind":113,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[385,-353],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":112}]},{"id":"O","layers":[{"ddd":0,"ind":114,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-385,353],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[394,-343.42],[401.94,-324.91],[420.45,-316.98],[412.52,-335.49],[394,-343.42]],"i":[[0,0],[-7.304,-7.293],[-2.922,2.921],[7.304,7.293],[2.923,-2.921]],"o":[[-2.921,2.921],[7.303,7.303],[2.919,-2.921],[-7.303,-7.303],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[420.45,-343.42],[401.94,-335.49],[394,-316.97],[412.52,-324.91],[420.45,-343.42]],"i":[[0,0],[7.293,-7.305],[-2.921,-2.923],[-7.293,7.305],[2.921,2.923]],"o":[[-2.921,-2.921],[-7.303,7.303],[2.921,2.919],[7.303,-7.303],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[407.23,-330.2],[407.23,-330.18]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"9","layers":[{"ddd":0,"ind":17,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":200,"s":[282,203],"i":{"x":[0.292],"y":[1]},"o":{"x":[0.483],"y":[0]}},{"t":228,"s":[282,212.03],"i":{"x":[0],"y":[1]},"o":{"x":[0.585],"y":[0]}},{"t":272,"s":[282,97],"i":{"x":[0.293],"y":[1]},"o":{"x":[0.694],"y":[0]}},{"t":308,"s":[282,103],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":348,"s":[282,103],"i":{"x":[0],"y":[1]},"o":{"x":[0.517],"y":[0]}},{"t":416,"s":[282,39],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":456,"s":[282,39],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":492,"s":[282,54]}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"r":{"a":1,"k":[{"t":200,"s":[0],"i":{"x":[0.326],"y":[1]},"o":{"x":[0.759],"y":[0]}},{"t":228,"s":[3],"i":{"x":[0],"y":[1]},"o":{"x":[0.311],"y":[0]}},{"t":272,"s":[-1.1],"i":{"x":[0],"y":[1]},"o":{"x":[0.572],"y":[0]}},{"t":292,"s":[0]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":115,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[683.15,145.39],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":17},{"ddd":0,"refId":"P","w":24,"h":8,"ind":116,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-12,-4],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":115},{"ddd":0,"ind":117,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":17,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":118,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":17,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,145.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"P","layers":[{"ddd":0,"ind":119,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[12,4],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[8.13,0.33],[10.69,0.33],[9.43,-0.79],[8.13,0.33]],"i":[[0,0],[0,0],[0.747,0],[0.135,-0.738]],"o":[[0,0],[-0.054,-0.693],[-0.702,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.51,3.19],[7.24,0.82],[9.43,-1.49],[11.57,0.66],[11.55,1.01],[8.1,1.01],[9.51,2.44],[10.74,1.64],[11.61,1.64],[9.51,3.19]],"i":[[0,0],[0,1.26],[-1.395,0],[0,-1.152],[0.009,-0.081],[0,0],[-0.783,0],[-0.126,0.513],[0,0],[1.125,0]],"o":[[-1.404,0],[0,-1.269],[1.395,0],[0,0.117],[0,0],[0.072,0.846],[0.666,0],[0,0],[-0.153,0.936],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-0.41,3.11],[-0.41,-1.42],[0.46,-1.42],[0.46,-0.62],[1.82,-1.49],[3.27,-0.56],[4.74,-1.49],[6.34,0.23],[6.34,3.11],[5.46,3.11],[5.46,0.48],[4.5,-0.73],[3.39,0.64],[3.39,3.11],[2.52,3.11],[2.52,0.48],[1.57,-0.73],[0.46,0.64],[0.46,3.11],[-0.41,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.8,2.49],[-2.49,1.13],[-2.49,1.04],[-3.66,1.04],[-4.64,1.8],[-3.8,2.49]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-3.97,3.19],[-5.52,1.82],[-3.75,0.37],[-2.8,0.37],[-2.49,0.14],[-3.59,-0.79],[-4.71,0.06],[-5.52,0.06],[-3.56,-1.49],[-1.63,0.19],[-1.63,3.11],[-2.49,3.11],[-2.49,2.37],[-3.97,3.19]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-11.61,3.11],[-11.61,-3.19],[-10.56,-3.19],[-7.53,1.67],[-7.53,-3.19],[-6.6,-3.19],[-6.6,3.11],[-7.63,3.11],[-10.67,-1.73],[-10.67,3.11],[-11.61,3.11]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"a","u":"","p":"data:image/png;base64,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","w":896,"h":448,"e":1},{"id":"b","layers":[{"ddd":0,"refId":"Q","w":51,"h":51,"ind":120,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[323,21],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":121,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-542.66,-39.25],[-542.66,-60.74],[-538.52,-60.74],[-538.52,-56.95],[-532.08,-61.08],[-525.21,-56.65],[-518.22,-61.08],[-510.67,-52.9],[-510.67,-39.25],[-514.81,-39.25],[-514.81,-51.74],[-519.37,-57.46],[-524.62,-50.98],[-524.62,-39.25],[-528.75,-39.25],[-528.75,-51.74],[-533.27,-57.46],[-538.52,-50.98],[-538.52,-39.25],[-542.66,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.199,0],[-0.853,-2.815],[-3.113,0],[0,-4.99],[0,0],[0,0],[0,0],[2.857,0],[0,-3.411],[0,0],[0,0],[0,0],[2.815,0],[0,-3.411],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.896,-2.431],[3.284,0],[0.896,-2.558],[4.649,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.284,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.284,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-558.69,-39.25],[-558.69,-60.74],[-554.55,-60.74],[-554.55,-56.6],[-548.84,-60.74],[-546.24,-60.74],[-546.24,-57.16],[-549.35,-57.16],[-554.55,-48.97],[-554.55,-39.25],[-558.69,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.028,0],[0,0],[0,0],[0,0],[0,-4.691],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.981,-2.857],[0,0],[0,0],[0,0],[-3.923,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-574.33,-42.53],[-567.51,-49.99],[-574.33,-57.46],[-581.2,-49.99],[-574.33,-42.53]],"i":[[0,0],[0,4.393],[4.051,0],[0,-4.392],[-4.094,0]],"o":[[4.051,0],[0,-4.392],[-4.094,0],[0,4.393],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-574.33,-38.91],[-585.42,-49.99],[-574.33,-61.08],[-563.29,-49.99],[-574.33,-38.91]],"i":[[0,0],[0,6.44],[-6.44,0],[0,-6.439],[6.44,0]],"o":[[-6.44,0],[0,-6.439],[6.44,0],[0,6.44],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-605.41,-39.25],[-605.41,-69.1],[-586.26,-69.1],[-586.26,-65.18],[-600.97,-65.18],[-600.97,-56.26],[-589.08,-56.26],[-589.08,-52.34],[-600.97,-52.34],[-600.97,-39.25],[-605.41,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.35,199.91],"ix":2},"a":{"a":0,"k":[-558.04,-54],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":122,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-37.02,-7.43],[37.02,-7.43],[37.66,-6.79],[37.66,6.79],[37.02,7.43],[-37.02,7.43],[-37.66,6.79],[-37.66,-6.79],[-37.02,-7.43]],"i":[[0,0],[0,0],[0,-0.356],[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0]],"o":[[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0],[0,0],[0,-0.356],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.48,104.52],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":123,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-37.02,-7.43],[37.02,-7.43],[37.66,-6.79],[37.66,6.79],[37.02,7.43],[-37.02,7.43],[-37.66,6.79],[-37.66,-6.79],[-37.02,-7.43]],"i":[[0,0],[0,0],[0,-0.356],[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0]],"o":[[0,0],[0.356,0],[0,0],[0,0.356],[0,0],[-0.356,0],[0,0],[0,-0.356],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.47,76.91],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":124,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,276],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":15,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.5,138],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"Q","layers":[{"ddd":0,"ind":125,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[25.37,25.32],"ix":2},"a":{"a":0,"k":[-407.02,-207.6],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"R","w":50,"h":51,"ind":120,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-432,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":125}]},{"id":"R","layers":[{"ddd":0,"ind":126,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[432,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-422.49,-223.06],[-413.21,-201.41],[-391.55,-192.13],[-400.83,-213.78],[-422.49,-223.06]],"i":[[0,0],[-8.542,-8.529],[-3.418,3.416],[8.542,8.529],[3.418,-3.416]],"o":[[-3.416,3.416],[8.54,8.54],[3.414,-3.416],[-8.54,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-391.56,-223.06],[-413.21,-213.78],[-422.49,-192.13],[-400.83,-201.41],[-391.56,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.529,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.54,8.54],[3.417,3.414],[8.54,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-407.02,-207.6],[-407.02,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"c","layers":[{"ddd":0,"ind":127,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[0,-30.62],[0,30.62]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.53,101.33],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":128,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[-22.96,0],[22.96,0]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.54,70.72],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"S","w":51,"h":51,"ind":129,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[323,21],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":130,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-103.84,-39.25],[-103.84,-69.74],[-99.71,-69.74],[-99.71,-39.25],[-103.84,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-124.98,-52.43],[-112.82,-52.43],[-118.79,-57.76],[-124.98,-52.43]],"i":[[0,0],[0,0],[3.541,0],[0.639,-3.497]],"o":[[0,0],[-0.254,-3.284],[-3.326,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-118.41,-38.91],[-129.16,-50.12],[-118.79,-61.08],[-108.64,-50.89],[-108.73,-49.23],[-125.11,-49.23],[-118.41,-42.45],[-112.61,-46.24],[-108.47,-46.24],[-118.41,-38.91]],"i":[[0,0],[0,5.971],[-6.61,0],[0,-5.458],[0.038,-0.384],[0,0],[-3.712,0],[-0.592,2.431],[0,0],[5.331,0]],"o":[[-6.655,0],[0,-6.013],[6.614,0],[0,0.555],[0,0],[0.341,4.009],[3.155,0],[0,0],[-0.725,4.436],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-143.21,-42.53],[-136.6,-49.99],[-143.21,-57.46],[-149.82,-49.99],[-143.21,-42.53]],"i":[[0,0],[0,4.478],[3.966,0],[0,-4.478],[-3.966,0]],"o":[[3.966,0],[0,-4.478],[-3.966,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-142.57,-38.91],[-149.47,-42.45],[-149.47,-39.25],[-153.61,-39.25],[-153.61,-69.74],[-149.47,-69.74],[-149.47,-57.59],[-142.61,-61.08],[-132.42,-49.99],[-142.57,-38.91]],"i":[[0,0],[1.279,2.133],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.857,0],[0,-6.354],[6.44,0]],"o":[[-2.9,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.322,-2.132],[6.483,0],[0,6.355],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-169.65,-42.19],[-163.46,-48.67],[-163.46,-49.06],[-169.01,-49.06],[-173.66,-45.47],[-169.65,-42.19]],"i":[[0,0],[0,3.966],[0,0],[0,0],[0,-2.26],[-2.431,0]],"o":[[3.881,0],[0,0],[0,0],[-2.815,0],[0,1.962],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-170.46,-38.91],[-177.79,-45.39],[-169.43,-52.26],[-164.91,-52.26],[-163.46,-53.36],[-168.66,-57.76],[-173.95,-53.7],[-177.79,-53.7],[-168.54,-61.08],[-159.37,-53.11],[-159.37,-39.25],[-163.46,-39.25],[-163.46,-42.79],[-170.46,-38.91]],"i":[[0,0],[0,3.838],[-5.032,0],[0,0],[0,0.768],[3.284,0],[0.128,-2.175],[0,0],[-5.118,0],[0,-4.777],[0,0],[0,0],[0,0],[3.241,0]],"o":[[-4.393,0],[0,-4.137],[0,0],[0.981,0],[0,-2.602],[-3.028,0],[0,0],[0.341,-4.222],[5.544,0],[0,0],[0,0],[0,0],[-1.066,2.345],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-199.12,-39.25],[-199.12,-69.1],[-194.69,-69.1],[-194.69,-43.17],[-180.15,-43.17],[-180.15,-39.25],[-199.12,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[346,254],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":131,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":5,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":15,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[197.5,138.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"S","layers":[{"ddd":0,"ind":132,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[23,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"T","w":51,"h":51,"ind":129,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-23,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":132}]},{"id":"T","layers":[{"ddd":0,"ind":133,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[23,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.02,-223.06],[-3.74,-201.41],[17.91,-192.13],[8.62,-213.78],[-13.02,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.543,8.529],[3.416,-3.416]],"o":[[-3.416,3.416],[8.536,8.54],[3.409,-3.416],[-8.537,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[17.9,-223.06],[-3.75,-213.78],[-13.02,-192.13],[8.63,-201.41],[17.9,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.537,8.54],[3.416,3.414],[8.536,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[2.44,-207.6],[2.44,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"d","layers":[{"ddd":0,"ind":24,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":0,"s":[133.24,473.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":104,"s":[507.08,94.91]}],"ix":2},"a":{"a":0,"k":[257,-116],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":134,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":24},{"ddd":0,"refId":"U","w":50,"h":51,"ind":135,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[387,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":134},{"ddd":0,"ind":136,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[305.62,-39.25],[298.46,-46.28],[298.46,-57.16],[294.06,-57.16],[294.06,-60.74],[298.46,-60.74],[298.46,-67.48],[302.59,-67.48],[302.59,-60.74],[308.94,-60.74],[308.94,-57.16],[302.59,-57.16],[302.59,-46.41],[305.92,-42.83],[308.94,-42.83],[308.94,-39.25],[305.62,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.048,0],[0,0],[0,0],[0,0]],"o":[[-4.351,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[279.52,-38.91],[271.5,-47.52],[271.5,-60.74],[275.64,-60.74],[275.64,-48.33],[280.67,-42.62],[286.47,-49.1],[286.47,-60.74],[290.61,-60.74],[290.61,-39.25],[286.47,-39.25],[286.47,-43.04],[279.52,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.86,0],[0,0],[0,0],[0,0],[0,3.412],[3.371,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[256.3,-42.53],[262.91,-49.99],[256.3,-57.46],[249.69,-49.99],[256.3,-42.53]],"i":[[0,0],[0,4.478],[3.963,0],[0,-4.478],[-3.969,0]],"o":[[3.963,0],[0,-4.478],[-3.969,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[245.9,-30.55],[245.9,-60.74],[250.03,-60.74],[250.03,-57.59],[256.9,-61.08],[267.09,-49.99],[256.94,-38.91],[250.03,-42.45],[250.03,-30.55],[245.9,-30.55]],"i":[[0,0],[0,0],[0,0],[0,0],[-2.862,0],[0,-6.354],[6.444,0],[1.279,2.133],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.323,-2.132],[6.482,0],[0,6.355],[-2.901,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[221.07,-39.25],[221.07,-60.74],[225.21,-60.74],[225.21,-56.95],[232.12,-61.08],[240.14,-52.47],[240.14,-39.25],[236,-39.25],[236,-51.66],[230.97,-57.37],[225.21,-50.89],[225.21,-39.25],[221.07,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[0,-5.118],[0,0],[0,0],[0,0],[3.028,0],[0,-3.752],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.151,-2.687],[4.86,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.365,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[210.34,-39.25],[210.34,-69.1],[214.77,-69.1],[214.77,-39.25],[210.34,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":137,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[234.2,-171.8],[230.37,-171.8],[227.67,-170.68],[226.55,-167.98],[226.55,-137.36],[227.67,-134.65],[230.37,-133.53],[234.2,-133.53]],"i":[[0,0],[0,0],[0.719,-0.718],[0,-1.015],[0,0],[-0.719,-0.718],[-1.011,0],[0,0]],"o":[[0,0],[-1.011,0],[-0.719,0.717],[0,0],[0,1.015],[0.719,0.718],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[264.82,-171.8],[291.61,-171.8],[294.32,-170.68],[295.44,-167.98],[295.44,-137.36],[294.32,-134.65],[291.61,-133.53],[264.82,-133.53]],"i":[[0,0],[0,0],[-0.719,-0.718],[0,-1.015],[0,0],[0.712,-0.718],[1.018,0],[0,0]],"o":[[0,0],[1.018,0],[0.712,0.717],[0,0],[0,1.015],[-0.719,0.718],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-129.7],[246.15,-121.58],[238.03,-118.22]],"i":[[0,0],[2.15,-2.153],[3.041,0]],"o":[[0,3.045],[-2.156,2.154],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-129.7],[252.87,-121.58],[261,-118.22]],"i":[[0,0],[-2.15,-2.153],[-3.047,0]],"o":[[0,3.045],[2.156,2.154],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-175.63],[246.15,-183.75],[238.03,-187.11]],"i":[[0,0],[2.15,2.153],[3.041,0]],"o":[[0,-3.045],[-2.156,-2.153],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[249.51,-175.63],[249.51,-129.7]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[261,-187.11],[252.87,-183.75],[249.51,-175.63]],"i":[[0,0],[2.156,-2.153],[0,-3.045]],"o":[[-3.047,0],[-2.15,2.153],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":138,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":24,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[257,-116],"ix":2},"s":{"a":0,"k":[99,99],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"U","layers":[{"ddd":0,"ind":139,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-387,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[396.44,-223.06],[405.72,-201.41],[427.37,-192.13],[418.09,-213.78],[396.44,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.537,8.529],[3.416,-3.416]],"o":[[-3.416,3.416],[8.536,8.54],[3.41,-3.416],[-8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[427.36,-223.06],[405.72,-213.78],[396.44,-192.13],[418.09,-201.41],[427.36,-223.06]],"i":[[0,0],[8.524,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.543,8.54],[3.416,3.414],[8.537,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[411.9,-207.6],[411.9,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"e","layers":[{"ddd":0,"ind":25,"ty":3,"sr":1,"ks":{"p":{"a":1,"k":[{"t":-4,"s":[132.4,473.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":100,"s":[506.24,94.91]}],"ix":2},"a":{"a":0,"k":[670.85,-116],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":140,"ty":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":25},{"ddd":0,"refId":"V","w":51,"h":51,"ind":141,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[796,-233],"ix":2},"o":{"a":0,"k":50,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":140},{"ddd":0,"ind":142,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[787.54,-39.25],[787.54,-60.74],[791.68,-60.74],[791.68,-56.95],[798.59,-61.08],[806.6,-52.47],[806.6,-39.25],[802.47,-39.25],[802.47,-51.66],[797.43,-57.37],[791.68,-50.89],[791.68,-39.25],[787.54,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[0,-5.118],[0,0],[0,0],[0,0],[3.028,0],[0,-3.752],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[1.151,-2.687],[4.86,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.371,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[771.89,-42.53],[778.72,-49.99],[771.89,-57.46],[765.03,-49.99],[771.89,-42.53]],"i":[[0,0],[0,4.393],[4.052,0],[0,-4.392],[-4.09,0]],"o":[[4.052,0],[0,-4.392],[-4.09,0],[0,4.393],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[771.89,-38.91],[760.81,-49.99],[771.89,-61.08],[782.94,-49.99],[771.89,-38.91]],"i":[[0,0],[0,6.44],[-6.437,0],[0,-6.439],[6.444,0]],"o":[[-6.437,0],[0,-6.439],[6.444,0],[0,6.44],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[755.25,-39.25],[748.09,-46.28],[748.09,-57.16],[738.37,-57.16],[738.37,-46.41],[741.69,-42.83],[744.72,-42.83],[744.72,-39.25],[741.39,-39.25],[734.23,-46.28],[734.23,-57.16],[729.84,-57.16],[729.84,-60.74],[734.23,-60.74],[734.23,-67.48],[738.37,-67.48],[738.37,-60.74],[748.09,-60.74],[748.09,-67.48],[752.23,-67.48],[752.23,-60.74],[758.58,-60.74],[758.58,-57.16],[752.23,-57.16],[752.23,-46.41],[755.55,-42.83],[758.58,-42.83],[758.58,-39.25],[755.25,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[-2.042,0],[0,0],[0,0],[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.042,0],[0,0],[0,0],[0,0]],"o":[[-4.345,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[-4.345,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[715.29,-38.91],[707.28,-47.52],[707.28,-60.74],[711.41,-60.74],[711.41,-48.33],[716.45,-42.62],[722.25,-49.1],[722.25,-60.74],[726.38,-60.74],[726.38,-39.25],[722.25,-39.25],[722.25,-43.04],[715.29,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.86,0],[0,0],[0,0],[0,0],[0,3.412],[3.371,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[685.66,-57.03],[692.1,-57.03],[697.22,-61.21],[692.05,-65.39],[685.66,-65.39],[685.66,-57.03]],"i":[[0,0],[0,0],[0,2.772],[3.371,0],[0,0],[0,0]],"o":[[0,0],[3.327,0],[0,-2.73],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[685.66,-43.17],[692.27,-43.17],[698.53,-48.16],[692.27,-53.15],[685.66,-53.15],[685.66,-43.17]],"i":[[0,0],[0,0],[0,3.242],[4.179,0],[0,0],[0,0]],"o":[[0,0],[4.179,0],[0,-3.241],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[681.26,-39.25],[681.26,-69.1],[692.31,-69.1],[701.52,-61.81],[697.68,-55.58],[702.88,-47.95],[692.87,-39.25],[681.26,-39.25]],"i":[[0,0],[0,0],[0,0],[0,-4.478],[2.137,-1.024],[0,-4.137],[6.183,0],[0,0]],"o":[[0,0],[0,0],[5.585,0],[0,3.198],[2.99,1.066],[0,5.373],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[663.6,-39.25],[656.44,-46.28],[656.44,-57.16],[652.04,-57.16],[652.04,-60.74],[656.44,-60.74],[656.44,-67.48],[660.57,-67.48],[660.57,-60.74],[666.92,-60.74],[666.92,-57.16],[660.57,-57.16],[660.57,-46.41],[663.9,-42.83],[666.92,-42.83],[666.92,-39.25],[663.6,-39.25]],"i":[[0,0],[0,4.393],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.048,0],[0,0],[0,0],[0,0]],"o":[[-4.351,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,2.303],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[644.18,-69.74],[648.79,-69.74],[648.79,-64.54],[644.18,-64.54],[644.18,-69.74]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[644.44,-39.25],[644.44,-60.74],[648.57,-60.74],[648.57,-39.25],[644.44,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[606.71,-39.25],[606.71,-60.74],[610.84,-60.74],[610.84,-56.95],[617.28,-61.08],[624.15,-56.65],[631.14,-61.08],[638.69,-52.9],[638.69,-39.25],[634.55,-39.25],[634.55,-51.74],[629.99,-57.46],[624.75,-50.98],[624.75,-39.25],[620.61,-39.25],[620.61,-51.74],[616.09,-57.46],[610.84,-50.98],[610.84,-39.25],[606.71,-39.25]],"i":[[0,0],[0,0],[0,0],[0,0],[-3.2,0],[-0.852,-2.815],[-3.117,0],[0,-4.99],[0,0],[0,0],[0,0],[2.856,0],[0,-3.411],[0,0],[0,0],[0,0],[2.812,0],[0,-3.411],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.897,-2.431],[3.282,0],[0.897,-2.558],[4.644,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.289,0],[0,0],[0,0],[0,0],[0,-3.412],[-3.282,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[591.2,-42.53],[597.82,-49.99],[591.2,-57.46],[584.59,-49.99],[591.2,-42.53]],"i":[[0,0],[0,4.478],[3.969,0],[0,-4.478],[-3.963,0]],"o":[[3.969,0],[0,-4.478],[-3.963,0],[0,4.478],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[591.85,-38.91],[584.94,-42.45],[584.94,-39.25],[580.8,-39.25],[580.8,-69.74],[584.94,-69.74],[584.94,-57.59],[591.8,-61.08],[602,-49.99],[591.85,-38.91]],"i":[[0,0],[1.279,2.133],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.856,0],[0,-6.354],[6.437,0]],"o":[[-2.901,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.323,-2.132],[6.482,0],[0,6.355],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[563.7,-38.91],[555.68,-47.52],[555.68,-60.74],[559.82,-60.74],[559.82,-48.33],[564.85,-42.62],[570.65,-49.1],[570.65,-60.74],[574.78,-60.74],[574.78,-39.25],[570.65,-39.25],[570.65,-43.04],[563.7,-38.91]],"i":[[0,0],[0,5.117],[0,0],[0,0],[0,0],[-3.028,0],[0,3.753],[0,0],[0,0],[0,0],[0,0],[0,0],[3.2,0]],"o":[[-4.866,0],[0,0],[0,0],[0,0],[0,3.412],[3.365,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.151,2.687],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[540.47,-38.91],[529,-49.14],[533.3,-49.14],[540.47,-42.83],[546.87,-47.52],[529.9,-61.3],[540.13,-69.44],[550.79,-60.44],[546.49,-60.44],[540.13,-65.52],[534.37,-61.34],[551.39,-47.56],[540.47,-38.91]],"i":[[0,0],[0.344,6.184],[0,0],[-4.567,0],[0,3.241],[0,11.216],[-6.011,0],[-0.382,-5.458],[0,0],[3.67,0],[0,-2.558],[0,-11.685],[6.393,0]],"o":[[-7.08,0],[0,0],[0.344,3.838],[3.753,0],[0,-7.463],[0,-4.862],[6.1,0],[0,0],[-0.299,-3.07],[-3.581,0],[0,7.506],[0,5.459],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":143,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[677.09,-136.49],[676.84,-138.96],[678.4,-140.89],[680.87,-141.14],[682.8,-139.58],[684.34,-136.73]],"i":[[0,0],[-0.242,0.824],[-0.757,0.409],[-0.821,-0.246],[-0.407,-0.756],[0,0]],"o":[[-0.407,-0.756],[0.248,-0.824],[0.757,-0.409],[0.827,0.246],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[672.41,-131.51],[670.36,-135.31],[669.99,-136.52],[670.11,-137.78],[670.7,-138.9],[671.67,-139.7],[672.88,-140.08],[674.14,-139.96],[675.26,-139.37],[676.07,-138.39],[678.64,-133.64]],"i":[[0,0],[0,0],[0.045,0.424],[-0.121,0.408],[-0.267,0.331],[-0.375,0.202],[-0.426,0.044],[-0.407,-0.121],[-0.331,-0.268],[-0.204,-0.375],[0,0]],"o":[[0,0],[-0.204,-0.374],[-0.045,-0.424],[0.121,-0.408],[0.267,-0.33],[0.375,-0.203],[0.42,-0.044],[0.407,0.121],[0.331,0.268],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[672.93,-130.56],[665.22,-144.81],[663.29,-146.38],[660.83,-146.12],[659.26,-144.2],[659.51,-141.73],[668.25,-125.57],[663.95,-126.85],[661.33,-126.74],[659.33,-125.04],[658.97,-122.63],[660.39,-120.64],[672.53,-113.13],[673.21,-112.76],[679.36,-111.22],[685.51,-112.79],[685.12,-112.57],[688.92,-114.63],[695.18,-122.33],[694.16,-132.21],[689.53,-140.76],[687.61,-142.33],[685.14,-142.07],[683.57,-140.15],[683.83,-137.68]],"i":[[0,0],[0,0],[0.821,0.246],[0.757,-0.409],[0.242,-0.824],[-0.407,-0.756],[0,0],[0,0],[0.84,-0.328],[0.458,-0.774],[-0.197,-0.821],[-0.712,-0.45],[-1.088,-0.59],[-0.229,-0.123],[-2.144,0.004],[-1.889,1.022],[0,0],[0,0],[-0.986,3.297],[1.635,3.025],[0,0],[0.821,0.245],[0.751,-0.41],[0.242,-0.824],[-0.413,-0.756]],"o":[[0,0],[-0.413,-0.756],[-0.827,-0.246],[-0.757,0.409],[-0.248,0.824],[0,0],[0,0],[-0.859,-0.256],[-0.84,0.328],[-0.432,0.726],[0.197,0.821],[7.01,4.417],[0.223,0.123],[1.889,1.015],[2.15,-0.004],[0,0],[0,0],[3.022,-1.637],[0.98,-3.296],[0,0],[-0.407,-0.756],[-0.827,-0.246],[-0.757,0.409],[-0.248,0.824],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[677.3,-128.87],"ix":2},"a":{"a":0,"k":[677.3,-128.87],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":144,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[695.61,-130.39],[697.27,-130.39],[710.4,-143.51],[710.4,-159.9],[697.27,-173.02],[643.65,-173.02],[630.53,-159.9],[630.53,-143.51],[643.65,-130.39],[663.41,-130.39]],"i":[[0,0],[0,0],[0,7.248],[0,0],[7.245,0],[0,0],[0,-7.248],[0,0],[-7.245,0],[0,0]],"o":[[0,0],[7.245,0],[0,0],[0,-7.248],[0,0],[-7.245,0],[0,0],[0,7.248],[0,0],[0,0]]}}},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":1,"ml":4},{"ty":"tr","p":{"a":0,"k":[670.46,-151.71],"ix":2},"a":{"a":0,"k":[670.46,-151.71],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":145,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"parent":25,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[395,277],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":8,"ix":2}},{"ty":"st","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":4,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[670.85,-116],"ix":2},"s":{"a":0,"k":[99,99],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"V","layers":[{"ddd":0,"ind":146,"ty":4,"sr":1,"ks":{"p":{"a":0,"k":[-796,233],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[805.9,-223.06],[815.18,-201.41],[836.83,-192.13],[827.55,-213.78],[805.9,-223.06]],"i":[[0,0],[-8.543,-8.529],[-3.422,3.416],[8.543,8.529],[3.422,-3.416]],"o":[[-3.416,3.416],[8.543,8.54],[3.409,-3.416],[-8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[836.83,-223.06],[815.18,-213.78],[805.9,-192.13],[827.55,-201.41],[836.83,-223.06]],"i":[[0,0],[8.53,-8.543],[-3.416,-3.418],[-8.53,8.543],[3.416,3.418]],"o":[[-3.416,-3.416],[-8.543,8.54],[3.416,3.414],[8.543,-8.54],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":false,"v":[[821.36,-207.6],[821.36,-207.57]],"i":[[0,0],[0,0]],"o":[[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"st","c":{"a":0,"k":[0.13,0.13,0.13],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":3,"ix":2},"lc":2,"lj":2,"ml":4},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]},{"id":"f","layers":[{"ddd":0,"refId":"W","ind":27,"ty":2,"sr":1,"ks":{"p":{"a":0,"k":[147.95,140.95],"ix":2},"a":{"a":0,"k":[653.29,801.29],"ix":2},"s":{"a":1,"k":[{"t":-8,"s":[0,0],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":216,"s":[25,25]}],"ix":2},"o":{"a":1,"k":[{"t":592,"s":[100],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":628,"s":[0]}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0}]},{"id":"W","u":"","p":"data:image/png;base64,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YO93u/3hzjnHOOcdFHXTPD/NI1eAqmmhZ8WVD9kQECtfliQEgJASAkBH62PdUgyd0/bacDFTw0TLZkXhzjnHOObNBScsM2NKhx9te61C2urmvASAkBICQEgJASAkBMgLcYEd0Hh4T5hQJmawfHKMtmReHOOcc45tJlHoiT/h/hYRBB8kHfzMahUgJASAkBICQEgJASAZ4FgHk3F49bzoCBWvyxICQEgJASAZn9TgEYhs1RvhmDa70KtuqAgVr8sSAkBH6bGppY78cPfnfLDWzrZkXhzjnHOOcc45xzi4RY1H7kTiS59MAwrFwAOLsyLw5xzjjhgOMogFR2X7Rzm4qxMGJASAkBICQEgJASAkBKLOATd4LQYc9tJJSKV73R9oyqyBICMrOSUCcwGrLZ5brhfUuiFEnOoy2ZF4c45xzjnHOOcc45xzjnHX40lTOgNDdN+b/MHuGoZfg9qPuWbvjI93axj+8Occ45xzjnHOOcc45xzjnHOOcc45xzjnHxZJevyxICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJASAkBICQEgJALgAA/u2oAAAAABRvZe8svGFYehUK/Bkb/o3ZD5Y8qXX/PKuZ8AccPKT3xcqfJG1GK3kEYalY5qthz7z9FU1OaXwbmWgjaVqCrJX2oDvYkW2yKU3uN+Vd6CJf+62r8TpCsj7DW1u3H9MpnPbB8TB9hsDHC67iNHFddxGjiuu4XAWl2kCAJGz2rMnxvfm9up/7ltRiG8+v/5Xv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","w":1307,"h":1067,"e":1}],"layers":[{"ddd":0,"refId":"0","w":225,"h":113,"ind":1,"ty":0,"nm":"lottielab.com","sr":1,"ks":{"p":{"a":0,"k":[35,17],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":732,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"1","w":1184,"h":592,"ind":2,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"a":{"a":0,"k":[592,296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":600,"s":[100],"h":1},{"t":816,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"2","w":296,"h":148,"ind":3,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":716,"s":[100],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"3","w":296,"h":148,"ind":4,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":592,"s":[100],"h":1},{"t":856,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":5,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":176,"s":[22.5,22.5],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":248,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":6,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-137.23,51.63],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":0,"k":[76,76],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":5},{"ddd":0,"refId":"4","w":346,"h":58,"ind":7,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-2,-2],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":6},{"ddd":0,"ind":8,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-255.49,52.06],"ix":2},"a":{"a":0,"k":[25.34,27.62],"ix":2},"s":{"a":1,"k":[{"t":512,"s":[70,70],"i":{"x":[0],"y":[3.063]},"o":{"x":[0],"y":[0]}},{"t":548,"s":[81,81]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":5},{"ddd":0,"refId":"5","w":107,"h":108,"ind":9,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-32,-32],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":8},{"ddd":0,"ind":10,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[111.85,87.11],"ix":2},"s":{"a":1,"k":[{"t":444,"s":[21,21],"i":{"x":[0.288],"y":[1]},"o":{"x":[0.478],"y":[0]}},{"t":460,"s":[26.25,26.25],"i":{"x":[0.629],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":480,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":11,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[7.38,-0.79],"ix":2},"a":{"a":0,"k":[172,27],"ix":2},"s":{"a":1,"k":[{"t":448,"s":[75,75],"i":{"x":[0.833],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":508,"s":[76,76]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":10},{"ddd":0,"refId":"6","w":343,"h":53,"ind":12,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[1,0],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":11},{"ddd":0,"ind":13,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[-110.31,-1.7],"ix":2},"a":{"a":0,"k":[27.34,25.87],"ix":2},"s":{"a":1,"k":[{"t":496,"s":[81,81],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":512,"s":[67,67]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":10},{"ddd":0,"refId":"7","w":92,"h":83,"ind":14,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-25,-15],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":13},{"ddd":0,"refId":"8","w":338,"h":237,"ind":15,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":336,"s":[-40.48,107.77],"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]}},{"t":408,"s":[77.02,102.77]}],"ix":2},"a":{"a":0,"k":[169,118.5],"ix":2},"s":{"a":1,"k":[{"t":428,"s":[19.75,19.75],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":452,"s":[16.25,16.25]}],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":356,"s":[100],"h":1},{"t":448,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":16,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":176,"s":[22.5,22.5],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":248,"s":[25,25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"9","w":563,"h":283,"ind":17,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-282,-203],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":16},{"ddd":0,"ind":18,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"parent":16,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[9.58,3.18],[9.58,-3.25],[10.46,-3.25],[10.46,3.18],[9.58,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.38,-3.25],[8.36,-3.25],[8.36,-2.16],[7.38,-2.16],[7.38,-3.25]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[7.44,3.18],[7.44,-1.35],[8.31,-1.35],[8.31,3.18],[7.44,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[4.05,2.56],[5.36,1.19],[5.36,1.11],[4.19,1.11],[3.21,1.87],[4.05,2.56]],"i":[[0,0],[0,0.837],[0,0],[0,0],[0,-0.477],[-0.513,0]],"o":[[0.819,0],[0,0],[0,0],[-0.594,0],[0,0.414],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[3.88,3.25],[2.33,1.89],[4.1,0.44],[5.05,0.44],[5.36,0.2],[4.26,-0.72],[3.15,0.13],[2.33,0.13],[4.29,-1.43],[6.22,0.26],[6.22,3.18],[5.36,3.18],[5.36,2.43],[3.88,3.25]],"i":[[0,0],[0,0.81],[-1.062,0],[0,0],[0,0.162],[0.693,0],[0.027,-0.459],[0,0],[-1.08,0],[0,-1.008],[0,0],[0,0],[0,0],[0.684,0]],"o":[[-0.927,0],[0,-0.873],[0,0],[0.207,0],[0,-0.549],[-0.639,0],[0,0],[0.072,-0.891],[1.17,0],[0,0],[0,0],[0,0],[-0.225,0.495],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-5.41,3.18],[-5.41,-1.35],[-4.54,-1.35],[-4.54,-0.55],[-3.18,-1.43],[-1.73,-0.49],[-0.26,-1.43],[1.34,0.3],[1.34,3.18],[0.47,3.18],[0.47,0.54],[-0.5,-0.66],[-1.6,0.71],[-1.6,3.18],[-2.48,3.18],[-2.48,0.54],[-3.43,-0.66],[-4.54,0.71],[-4.54,3.18],[-5.41,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.675,0],[-0.18,-0.594],[-0.657,0],[0,-1.053],[0,0],[0,0],[0,0],[0.603,0],[0,-0.72],[0,0],[0,0],[0,0],[0.594,0],[0,-0.72],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.189,-0.513],[0.693,0],[0.189,-0.54],[0.981,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0],[0,-0.72],[-0.693,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-10.46,3.18],[-10.46,-3.12],[-6.41,-3.12],[-6.41,-2.29],[-9.52,-2.29],[-9.52,-0.48],[-7.01,-0.48],[-7.01,0.35],[-9.52,0.35],[-9.52,2.35],[-6.32,2.35],[-6.32,3.18],[-10.46,3.18]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":50,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[682,120.32],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-66,-10],[66,-10],[70,-6],[70,6],[66,10],[-66,10],[-70,6],[-70,-6],[-66,-10]],"i":[[0,0],[0,0],[0,-2.209],[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0]],"o":[[0,0],[2.209,0],[0,0],[0,2.209],[0,0],[-2.209,0],[0,0],[0,-2.209],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[733.82,120.5],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":1,"k":[{"t":248,"s":[0,0],"i":{"x":[0.437],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":284,"s":[0,100],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":348,"s":[0,100],"i":{"x":[0],"y":[1]},"o":{"x":[0.517],"y":[0]}},{"t":416,"s":[0,36],"i":{"x":[0.75],"y":[0.75]},"o":{"x":[0.25],"y":[0.25]}},{"t":448,"s":[0,36],"i":{"x":[0],"y":[1]},"o":{"x":[0],"y":[0]}},{"t":484,"s":[0,51]}],"ix":2},"a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"ind":19,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"parent":16,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[15.39,3.54],[13.71,1.89],[13.71,-0.67],[12.68,-0.67],[12.68,-1.5],[13.71,-1.5],[13.71,-3.08],[14.68,-3.08],[14.68,-1.5],[16.17,-1.5],[16.17,-0.67],[14.68,-0.67],[14.68,1.85],[15.46,2.69],[16.17,2.69],[16.17,3.54],[15.39,3.54]],"i":[[0,0],[0,1.03],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.48,0],[0,0],[0,0],[0,0]],"o":[[-1.02,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.54],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.84,-3.62],[11.92,-3.62],[11.92,-2.4],[10.84,-2.4],[10.84,-3.62]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[10.9,3.54],[10.9,-1.5],[11.87,-1.5],[11.87,3.54],[10.9,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[2.05,3.54],[2.05,-1.5],[3.02,-1.5],[3.02,-0.61],[4.53,-1.58],[6.14,-0.55],[7.78,-1.58],[9.55,0.34],[9.55,3.54],[8.58,3.54],[8.58,0.6],[7.51,-0.73],[6.28,0.79],[6.28,3.54],[5.31,3.54],[5.31,0.6],[4.25,-0.73],[3.02,0.79],[3.02,3.54],[2.05,3.54]],"i":[[0,0],[0,0],[0,0],[0,0],[-0.75,0],[-0.2,-0.66],[-0.73,0],[0,-1.17],[0,0],[0,0],[0,0],[0.67,0],[0,-0.8],[0,0],[0,0],[0,0],[0.66,0],[0,-0.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.21,-0.57],[0.77,0],[0.21,-0.6],[1.09,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0],[0,-0.8],[-0.77,0],[0,0],[0,0],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.58,2.77],[-0.04,1.01],[-1.58,-0.73],[-3.13,1.01],[-1.58,2.77]],"i":[[0,0],[0,1.05],[0.93,0],[0,-1.05],[-0.93,0]],"o":[[0.93,0],[0,-1.05],[-0.93,0],[0,1.05],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-1.43,3.62],[-3.06,2.79],[-3.06,3.54],[-4.03,3.54],[-4.03,-3.62],[-3.06,-3.62],[-3.06,-0.77],[-1.45,-1.58],[0.94,1.01],[-1.43,3.62]],"i":[[0,0],[0.3,0.5],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.67,0],[0,-1.49],[1.51,0]],"o":[[-0.68,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.31,-0.5],[1.52,0],[0,1.49],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-8.04,3.62],[-9.91,1.59],[-9.91,-1.5],[-8.95,-1.5],[-8.95,1.41],[-7.76,2.75],[-6.4,1.23],[-6.4,-1.5],[-5.43,-1.5],[-5.43,3.54],[-6.4,3.54],[-6.4,2.65],[-8.04,3.62]],"i":[[0,0],[0,1.2],[0,0],[0,0],[0,0],[-0.71,0],[0,0.88],[0,0],[0,0],[0,0],[0,0],[0,0],[0.75,0]],"o":[[-1.14,0],[0,0],[0,0],[0,0],[0,0.8],[0.79,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.27,0.63],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-13.48,3.62],[-16.17,1.22],[-15.16,1.22],[-13.48,2.69],[-11.98,1.59],[-15.96,-1.64],[-13.56,-3.54],[-11.06,-1.44],[-12.07,-1.44],[-13.56,-2.63],[-14.91,-1.65],[-10.92,1.58],[-13.48,3.62]],"i":[[0,0],[0.08,1.45],[0,0],[-1.07,0],[0,0.76],[0,2.63],[-1.41,0],[-0.09,-1.28],[0,0],[0.86,0],[0,-0.6],[0,-2.74],[1.5,0]],"o":[[-1.66,0],[0,0],[0.08,0.9],[0.88,0],[0,-1.75],[0,-1.14],[1.43,0],[0,0],[-0.07,-0.72],[-0.84,0],[0,1.76],[0,1.28],[0,0]]}}},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"fl","c":{"a":0,"k":[1,1,1],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[734.38,174.97],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"gr","it":[{"ty":"sh","d":1,"ks":{"a":0,"k":{"c":true,"v":[[-26.5,-10.5],[26.5,-10.5],[28.5,-8.5],[28.5,8.5],[26.5,10.5],[-26.5,10.5],[-28.5,8.5],[-28.5,-8.5],[-26.5,-10.5]],"i":[[0,0],[0,0],[0,-1.105],[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0]],"o":[[0,0],[1.105,0],[0,0],[0,1.105],[0,0],[-1.105,0],[0,0],[0,-1.105],[0,0]]}}},{"ty":"fl","c":{"a":0,"k":[0,0,0],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","p":{"a":0,"k":[734.32,175],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","a":{"a":0,"k":[733.82,141.5],"ix":2},"s":{"a":0,"k":[399,399],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"a","ind":20,"ty":2,"sr":1,"ks":{"a":{"a":0,"k":[448,224],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":176,"s":[100],"h":1},{"t":660,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":16},{"ddd":0,"ind":21,"ty":3,"sr":1,"ks":{"p":{"a":0,"k":[148,74],"ix":2},"s":{"a":1,"k":[{"t":148,"s":[25,25],"i":{"x":[1],"y":[1]},"o":{"x":[1],"y":[0]}},{"t":176,"s":[18.25,18.25]}],"ix":2},"o":{"a":0,"k":100,"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"refId":"b","w":395,"h":276,"ind":22,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":16,"s":[-762.81,389.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":136,"s":[-388.97,10.9]}],"ix":2},"a":{"a":0,"k":[197.5,138],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":16,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"c","w":395,"h":277,"ind":23,"ty":0,"sr":1,"ks":{"p":{"a":1,"k":[{"t":8,"s":[-499.64,389.66],"i":{"x":[0],"y":[1]},"o":{"x":[0.421],"y":[0]}},{"t":124,"s":[-125.81,10.9]}],"ix":2},"a":{"a":0,"k":[197.5,138.5],"ix":2},"s":{"a":0,"k":[65,65],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":8,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"d","w":640,"h":490,"ind":24,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-371,-84],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"refId":"e","w":639,"h":490,"ind":25,"ty":0,"sr":1,"ks":{"p":{"a":0,"k":[-107,-84],"ix":2},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":176,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0,"parent":21},{"ddd":0,"ind":26,"ty":4,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":64,"s":[100],"h":1}],"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"t":12,"s":[0,0],"i":{"x":[0],"y":[1]},"o":{"x":[0.454],"y":[0]}},{"t":152,"s":[885.4,463.6],"i":{"x":[0],"y":[1]},"o":{"x":[0.34],"y":[0]}},{"t":204,"s":[967.32,506.16]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"st","c":{"a":0,"k":[0.855,0.22,0.891],"ix":2},"o":{"a":0,"k":100,"ix":2},"w":{"a":0,"k":2,"ix":2},"lc":1,"lj":1,"ml":4},{"ty":"tr","p":{"a":0,"k":[-1.84,-2.42],"ix":2},"o":{"a":0,"k":100,"ix":2}}]},{"ty":"tr","p":{"a":0,"k":[148.46,74.6],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0},{"ddd":0,"refId":"f","w":296,"h":148,"ind":27,"ty":0,"sr":1,"ks":{"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":36,"s":[100],"h":1},{"t":668,"s":[0],"h":1}],"ix":2}},"ao":0,"ip":0,"op":877,"st":0},{"ddd":0,"ind":28,"ty":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[1184,592],"ix":2},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":2}},{"ty":"fl","c":{"a":0,"k":[0.965,0.965,0.965],"ix":2},"o":{"a":0,"k":100,"ix":2},"r":1,"bm":0},{"ty":"tr","a":{"a":0,"k":[-592,-296],"ix":2},"s":{"a":0,"k":[25,25],"ix":2},"o":{"a":0,"k":100,"ix":2}}]}],"ip":0,"op":877,"st":0}]}'); /***/ }), /***/ "../modules/promotions/assets/js/react/components/atomic-form-promotion-card.js": /*!**************************************************************************************!*\ !*** ../modules/promotions/assets/js/react/components/atomic-form-promotion-card.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"); var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); var _lottieReact = _interopRequireDefault(__webpack_require__(/*! lottie-react */ "../node_modules/lottie-react/build/index.umd.js")); var _icons = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); var animationData = _interopRequireWildcard(__webpack_require__(/*! ../assets/atomic-form-animation.json */ "../modules/promotions/assets/js/react/assets/atomic-form-animation.json")); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } var AtomicFormPromotionCard = function AtomicFormPromotionCard(props) { var _props$promotionData; var _ref = (_props$promotionData = props.promotionData) !== null && _props$promotionData !== void 0 ? _props$promotionData : {}, title = _ref.title, content = _ref.content, ctaText = _ref.ctaText; return /*#__PURE__*/_react.default.createElement(_ui.ClickAwayListener, { disableReactTree: true, mouseEvent: "onMouseDown", touchEvent: "onTouchStart", onClickAway: props.doClose }, /*#__PURE__*/_react.default.createElement(_ui.Box, { sx: { width: 296 } }, /*#__PURE__*/_react.default.createElement(_ui.Stack, { direction: "row", alignItems: "center", py: 1, px: 2 }, /*#__PURE__*/_react.default.createElement(_ui.Typography, { variant: "subtitle2" }, title), /*#__PURE__*/_react.default.createElement(_ui.CloseButton, { edge: "end", sx: { ml: 'auto' }, slotProps: { icon: { fontSize: 'small' } }, onClick: props.doClose })), /*#__PURE__*/_react.default.createElement(_ui.Box, { sx: { height: 150, width: '100%', overflow: 'hidden' } }, /*#__PURE__*/_react.default.createElement(_lottieReact.default, { animationData: animationData, loop: true, autoplay: true, rendererSettings: { preserveAspectRatio: 'xMidYMid slice' }, style: { width: '100%', height: '100%' } })), /*#__PURE__*/_react.default.createElement(_ui.Stack, { px: 2 }, /*#__PURE__*/_react.default.createElement(_ui.Typography, { variant: "body2", color: "secondary", sx: { pt: 1.5, pb: 1 } }, content)), /*#__PURE__*/_react.default.createElement(_ui.Stack, { direction: "row", pt: 1, pb: 1.5, px: 2 }, /*#__PURE__*/_react.default.createElement(_ui.Button, { variant: "contained", size: "small", color: "promotion", startIcon: /*#__PURE__*/_react.default.createElement(_icons.CrownFilledIcon, null), href: props.ctaUrl, target: "_blank", rel: "noopener noreferrer" }, ctaText)))); }; AtomicFormPromotionCard.propTypes = { doClose: PropTypes.func, promotionData: PropTypes.object, ctaUrl: PropTypes.string }; var _default = exports["default"] = AtomicFormPromotionCard; /***/ }), /***/ "../modules/promotions/assets/js/react/components/promotion-card.js": /*!**************************************************************************!*\ !*** ../modules/promotions/assets/js/react/components/promotion-card.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"); var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); var PromotionCard = function PromotionCard(_ref) { var doClose = _ref.doClose, promotionsData = _ref.promotionsData; var title = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.title, description = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.description, imgSrc = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.image, imgAlt = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.image_alt, ctaText = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.upgrade_text, ctaUrl = promotionsData === null || promotionsData === void 0 ? void 0 : promotionsData.upgrade_url; var redirectHandler = function redirectHandler() { window.open(ctaUrl, '_blank'); return doClose(); }; return /*#__PURE__*/_react.default.createElement(_ui.ClickAwayListener, { disableReactTree: true, mouseEvent: "onMouseDown", touchEvent: "onTouchStart", onClickAway: doClose }, /*#__PURE__*/_react.default.createElement(_ui.Box, { sx: { width: 296 }, "data-testid": "e-promotion-card" }, /*#__PURE__*/_react.default.createElement(_ui.Stack, { direction: "row", alignItems: "center", py: 1, px: 2 }, /*#__PURE__*/_react.default.createElement(_ui.Typography, { variant: "subtitle2" }, title), /*#__PURE__*/_react.default.createElement(_ui.Chip, { label: (0, _i18n.__)('PRO', 'elementor'), size: "small", variant: "outlined", color: "promotion", sx: { ml: 1 } }), /*#__PURE__*/_react.default.createElement(_ui.CloseButton, { edge: "end", sx: { ml: 'auto' }, slotProps: { icon: { fontSize: 'small' } }, onClick: doClose })), /*#__PURE__*/_react.default.createElement(_ui.Image, { src: imgSrc, alt: imgAlt, sx: { height: 150, width: '100%' } }), /*#__PURE__*/_react.default.createElement(_ui.Stack, { px: 2 }, 1 === description.length ? /*#__PURE__*/_react.default.createElement(_ui.Typography, { variant: "body2", color: "secondary", sx: { pt: 1.5, pb: 1 } }, description[0]) : /*#__PURE__*/_react.default.createElement(_ui.List, { sx: { pl: 2 } }, description.map(function (text, index) { return /*#__PURE__*/_react.default.createElement(_ui.ListItem, { key: index, sx: { listStyle: 'disc', display: 'list-item', color: 'text.secondary', p: 0 } }, /*#__PURE__*/_react.default.createElement(_ui.Typography, { variant: "body2", color: "secondary" }, text)); }))), /*#__PURE__*/_react.default.createElement(_ui.Stack, { pt: 1, pb: 1.5, px: 2 }, /*#__PURE__*/_react.default.createElement(_ui.Button, { variant: "contained", size: "small", color: "promotion", onClick: redirectHandler, sx: { ml: 'auto' } }, ctaText)))); }; PromotionCard.propTypes = { doClose: PropTypes.func, promotionsData: PropTypes.object }; var _default = exports["default"] = PromotionCard; /***/ }), /***/ "../modules/promotions/assets/js/react/controls/promotion.js": /*!*******************************************************************!*\ !*** ../modules/promotions/assets/js/react/controls/promotion.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js")); var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js")); var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); var _baseData = _interopRequireDefault(__webpack_require__(/*! elementor-controls/base-data */ "../assets/dev/js/editor/controls/base-data.js")); var _appManager = __webpack_require__(/*! ../app-manager */ "../modules/promotions/assets/js/react/app-manager.js"); function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var _default = exports["default"] = /*#__PURE__*/function (_ControlBaseDataView) { function _default(options) { var _this; (0, _classCallCheck2.default)(this, _default); _this = _callSuper(this, _default, [options]); (0, _defineProperty2.default)(_this, "promotionInfoTip", null); (0, _defineProperty2.default)(_this, "selectors", { wrapperElement: '.elementor-control-type-switcher', reactAnchor: '.e-promotion-react-wrapper' }); _this.AppManager = new _appManager.AppManager(); return _this; } (0, _inherits2.default)(_default, _ControlBaseDataView); return (0, _createClass2.default)(_default, [{ key: "ui", value: function ui() { return { switcher: '[data-promotion].elementor-control-type-switcher' }; } }, { key: "events", value: function events() { return { 'click @ui.switcher': 'onClickControlSwitcher' }; } }, { key: "promotionData", value: function promotionData(promotionType) { return elementorPromotionsData[promotionType] || {}; } }, { key: "onClickControlSwitcher", value: function onClickControlSwitcher(event) { event.stopPropagation(); this.AppManager.mount(event.target, this.selectors); } }]); }(_baseData.default); /***/ }), /***/ "../modules/promotions/assets/js/react/module.js": /*!*******************************************************!*\ !*** ../modules/promotions/assets/js/react/module.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js")); var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js")); var _appManager = __webpack_require__(/*! ./app-manager */ "../modules/promotions/assets/js/react/app-manager.js"); var _promotion = _interopRequireDefault(__webpack_require__(/*! ./controls/promotion */ "../modules/promotions/assets/js/react/controls/promotion.js")); function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var Module = exports["default"] = /*#__PURE__*/function (_elementorModules$edi) { function Module() { (0, _classCallCheck2.default)(this, Module); return _callSuper(this, Module, arguments); } (0, _inherits2.default)(Module, _elementorModules$edi); return (0, _createClass2.default)(Module, [{ key: "onElementorInit", value: function onElementorInit() { elementor.addControlView('promotion_control', _promotion.default); new _appManager.AppManager(); } }]); }(elementorModules.editor.utils.Module); /***/ }), /***/ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js": /*!******************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! \******************************************************************/ /***/ ((module) => { function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/arrayWithHoles.js ***! \****************************************************************/ /***/ ((module) => { function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js": /*!***********************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! \***********************************************************************/ /***/ ((module) => { function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/classCallCheck.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/classCallCheck.js ***! \****************************************************************/ /***/ ((module) => { function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/createClass.js": /*!*************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/createClass.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js"); function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/defineProperty.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js"); function _defineProperty(e, r, t) { return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! \****************************************************************/ /***/ ((module) => { function _getPrototypeOf(t) { return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, module.exports.__esModule = true, module.exports["default"] = module.exports, _getPrototypeOf(t); } module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/inherits.js": /*!**********************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/inherits.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js"); function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && setPrototypeOf(t, e); } module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js": /*!***********************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! \***********************************************************************/ /***/ ((module) => { function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js": /*!**********************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***! \**********************************************************************/ /***/ ((module) => { function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/nonIterableRest.js": /*!*****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/nonIterableRest.js ***! \*****************************************************************/ /***/ ((module) => { function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": /*!***************************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! \***************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]); var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return assertThisInitialized(t); } module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! \****************************************************************/ /***/ ((module) => { function _setPrototypeOf(t, e) { return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, module.exports.__esModule = true, module.exports["default"] = module.exports, _setPrototypeOf(t, e); } module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/slicedToArray.js": /*!***************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/slicedToArray.js ***! \***************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js"); var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js"); var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js"); var nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ "../node_modules/@babel/runtime/helpers/nonIterableRest.js"); function _slicedToArray(r, e) { return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest(); } module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/toPrimitive.js": /*!*************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/toPrimitive.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]); function toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/toPropertyKey.js": /*!***************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/toPropertyKey.js ***! \***************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]); var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ "../node_modules/@babel/runtime/helpers/toPrimitive.js"); function toPropertyKey(t) { var i = toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/typeof.js": /*!********************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/typeof.js ***! \********************************************************/ /***/ ((module) => { function _typeof(o) { "@babel/helpers - typeof"; return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o); } module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js": /*!****************************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! \****************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js"); function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0; } } module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/lottie-react/build/index.umd.js": /*!*******************************************************!*\ !*** ../node_modules/lottie-react/build/index.umd.js ***! \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { (function (global, factory) { true ? factory(exports, __webpack_require__(/*! lottie-web */ "../node_modules/lottie-web/build/player/lottie.js"), __webpack_require__(/*! react */ "react")) : 0; })(this, (function (exports, lottie, React) { 'use strict'; function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var lottie__default = /*#__PURE__*/_interopDefaultLegacy(lottie); var React__default = /*#__PURE__*/_interopDefaultLegacy(React); function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } var _excluded$1 = ["animationData", "loop", "autoplay", "initialSegment", "onComplete", "onLoopComplete", "onEnterFrame", "onSegmentStart", "onConfigReady", "onDataReady", "onDataFailed", "onLoadedImages", "onDOMLoaded", "onDestroy", "lottieRef", "renderer", "name", "assetsPath", "rendererSettings"]; var useLottie = function useLottie(props, style) { var animationData = props.animationData, loop = props.loop, autoplay = props.autoplay, initialSegment = props.initialSegment, onComplete = props.onComplete, onLoopComplete = props.onLoopComplete, onEnterFrame = props.onEnterFrame, onSegmentStart = props.onSegmentStart, onConfigReady = props.onConfigReady, onDataReady = props.onDataReady, onDataFailed = props.onDataFailed, onLoadedImages = props.onLoadedImages, onDOMLoaded = props.onDOMLoaded, onDestroy = props.onDestroy; props.lottieRef; props.renderer; props.name; props.assetsPath; props.rendererSettings; var rest = _objectWithoutProperties(props, _excluded$1); var _useState = React.useState(false), _useState2 = _slicedToArray(_useState, 2), animationLoaded = _useState2[0], setAnimationLoaded = _useState2[1]; var animationInstanceRef = React.useRef(); var animationContainer = React.useRef(null); /* ====================================== INTERACTION METHODS ====================================== */ /** * Play */ var play = function play() { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.play(); }; /** * Stop */ var stop = function stop() { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.stop(); }; /** * Pause */ var pause = function pause() { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.pause(); }; /** * Set animation speed * @param speed */ var setSpeed = function setSpeed(speed) { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSpeed(speed); }; /** * Got to frame and play * @param value * @param isFrame */ var goToAndPlay = function goToAndPlay(value, isFrame) { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndPlay(value, isFrame); }; /** * Got to frame and stop * @param value * @param isFrame */ var goToAndStop = function goToAndStop(value, isFrame) { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.goToAndStop(value, isFrame); }; /** * Set animation direction * @param direction */ var setDirection = function setDirection(direction) { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setDirection(direction); }; /** * Play animation segments * @param segments * @param forceFlag */ var playSegments = function playSegments(segments, forceFlag) { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.playSegments(segments, forceFlag); }; /** * Set sub frames * @param useSubFrames */ var setSubframe = function setSubframe(useSubFrames) { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.setSubframe(useSubFrames); }; /** * Get animation duration * @param inFrames */ var getDuration = function getDuration(inFrames) { var _a; return (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.getDuration(inFrames); }; /** * Destroy animation */ var destroy = function destroy() { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy(); // Removing the reference to the animation so separate cleanups are skipped. // Without it the internal `lottie-react` instance throws exceptions as it already cleared itself on destroy. animationInstanceRef.current = undefined; }; /* ====================================== LOTTIE ====================================== */ /** * Load a new animation, and if it's the case, destroy the previous one * @param {Object} forcedConfigs */ var loadAnimation = function loadAnimation() { var forcedConfigs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _a; // Return if the container ref is null if (!animationContainer.current) { return; } // Destroy any previous instance (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy(); // Build the animation configuration var config = _objectSpread2(_objectSpread2(_objectSpread2({}, props), forcedConfigs), {}, { container: animationContainer.current }); // Save the animation instance animationInstanceRef.current = lottie__default["default"].loadAnimation(config); setAnimationLoaded(!!animationInstanceRef.current); // Return a function that will clean up return function () { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.destroy(); animationInstanceRef.current = undefined; }; }; /** * (Re)Initialize when animation data changed */ React.useEffect(function () { var onUnmount = loadAnimation(); // Clean up on unmount return function () { return onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount(); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [animationData, loop]); // Update the autoplay state React.useEffect(function () { if (!animationInstanceRef.current) { return; } animationInstanceRef.current.autoplay = !!autoplay; }, [autoplay]); // Update the initial segment state React.useEffect(function () { if (!animationInstanceRef.current) { return; } // When null should reset to default animation length if (!initialSegment) { animationInstanceRef.current.resetSegments(true); return; } // If it's not a valid segment, do nothing if (!Array.isArray(initialSegment) || !initialSegment.length) { return; } // If the current position it's not in the new segment // set the current position to start if (animationInstanceRef.current.currentRawFrame < initialSegment[0] || animationInstanceRef.current.currentRawFrame > initialSegment[1]) { animationInstanceRef.current.currentRawFrame = initialSegment[0]; } // Update the segment animationInstanceRef.current.setSegment(initialSegment[0], initialSegment[1]); }, [initialSegment]); /* ====================================== EVENTS ====================================== */ /** * Reinitialize listener on change */ React.useEffect(function () { var partialListeners = [{ name: "complete", handler: onComplete }, { name: "loopComplete", handler: onLoopComplete }, { name: "enterFrame", handler: onEnterFrame }, { name: "segmentStart", handler: onSegmentStart }, { name: "config_ready", handler: onConfigReady }, { name: "data_ready", handler: onDataReady }, { name: "data_failed", handler: onDataFailed }, { name: "loaded_images", handler: onLoadedImages }, { name: "DOMLoaded", handler: onDOMLoaded }, { name: "destroy", handler: onDestroy }]; var listeners = partialListeners.filter(function (listener) { return listener.handler != null; }); if (!listeners.length) { return; } var deregisterList = listeners.map( /** * Handle the process of adding an event listener * @param {Listener} listener * @return {Function} Function that deregister the listener */ function (listener) { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener(listener.name, listener.handler); // Return a function to deregister this listener return function () { var _a; (_a = animationInstanceRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(listener.name, listener.handler); }; }); // Deregister listeners on unmount return function () { deregisterList.forEach(function (deregister) { return deregister(); }); }; }, [onComplete, onLoopComplete, onEnterFrame, onSegmentStart, onConfigReady, onDataReady, onDataFailed, onLoadedImages, onDOMLoaded, onDestroy]); /** * Build the animation view */ var View = /*#__PURE__*/React__default["default"].createElement("div", _objectSpread2({ style: style, ref: animationContainer }, rest)); return { View: View, play: play, stop: stop, pause: pause, setSpeed: setSpeed, goToAndStop: goToAndStop, goToAndPlay: goToAndPlay, setDirection: setDirection, playSegments: playSegments, setSubframe: setSubframe, getDuration: getDuration, destroy: destroy, animationContainerRef: animationContainer, animationLoaded: animationLoaded, animationItem: animationInstanceRef.current }; }; // helpers function getContainerVisibility(container) { var _container$getBoundin = container.getBoundingClientRect(), top = _container$getBoundin.top, height = _container$getBoundin.height; var current = window.innerHeight - top; var max = window.innerHeight + height; return current / max; } function getContainerCursorPosition(container, cursorX, cursorY) { var _container$getBoundin2 = container.getBoundingClientRect(), top = _container$getBoundin2.top, left = _container$getBoundin2.left, width = _container$getBoundin2.width, height = _container$getBoundin2.height; var x = (cursorX - left) / width; var y = (cursorY - top) / height; return { x: x, y: y }; } var useInitInteractivity = function useInitInteractivity(_ref) { var wrapperRef = _ref.wrapperRef, animationItem = _ref.animationItem, mode = _ref.mode, actions = _ref.actions; React.useEffect(function () { var wrapper = wrapperRef.current; if (!wrapper || !animationItem || !actions.length) { return; } animationItem.stop(); var scrollModeHandler = function scrollModeHandler() { var assignedSegment = null; var scrollHandler = function scrollHandler() { var currentPercent = getContainerVisibility(wrapper); // Find the first action that satisfies the current position conditions var action = actions.find(function (_ref2) { var visibility = _ref2.visibility; return visibility && currentPercent >= visibility[0] && currentPercent <= visibility[1]; }); // Skip if no matching action was found! if (!action) { return; } if (action.type === "seek" && action.visibility && action.frames.length === 2) { // Seek: Go to a frame based on player scroll position action var frameToGo = action.frames[0] + Math.ceil((currentPercent - action.visibility[0]) / (action.visibility[1] - action.visibility[0]) * action.frames[1]); //! goToAndStop must be relative to the start of the current segment animationItem.goToAndStop(frameToGo - animationItem.firstFrame - 1, true); } if (action.type === "loop") { // Loop: Loop a given frames if (assignedSegment === null) { // if not playing any segments currently. play those segments and save to state animationItem.playSegments(action.frames, true); assignedSegment = action.frames; } else { // if playing any segments currently. //check if segments in state are equal to the frames selected by action if (assignedSegment !== action.frames) { // if they are not equal. new segments are to be loaded animationItem.playSegments(action.frames, true); assignedSegment = action.frames; } else if (animationItem.isPaused) { // if they are equal the play method must be called only if lottie is paused animationItem.playSegments(action.frames, true); assignedSegment = action.frames; } } } if (action.type === "play" && animationItem.isPaused) { // Play: Reset segments and continue playing full animation from current position animationItem.resetSegments(true); animationItem.play(); } if (action.type === "stop") { // Stop: Stop playback animationItem.goToAndStop(action.frames[0] - animationItem.firstFrame - 1, true); } }; document.addEventListener("scroll", scrollHandler); return function () { document.removeEventListener("scroll", scrollHandler); }; }; var cursorModeHandler = function cursorModeHandler() { var handleCursor = function handleCursor(_x, _y) { var x = _x; var y = _y; // Resolve cursor position if cursor is inside container if (x !== -1 && y !== -1) { // Get container cursor position var pos = getContainerCursorPosition(wrapper, x, y); // Use the resolved position x = pos.x; y = pos.y; } // Find the first action that satisfies the current position conditions var action = actions.find(function (_ref3) { var position = _ref3.position; if (position && Array.isArray(position.x) && Array.isArray(position.y)) { return x >= position.x[0] && x <= position.x[1] && y >= position.y[0] && y <= position.y[1]; } if (position && !Number.isNaN(position.x) && !Number.isNaN(position.y)) { return x === position.x && y === position.y; } return false; }); // Skip if no matching action was found! if (!action) { return; } // Process action types: if (action.type === "seek" && action.position && Array.isArray(action.position.x) && Array.isArray(action.position.y) && action.frames.length === 2) { // Seek: Go to a frame based on player scroll position action var xPercent = (x - action.position.x[0]) / (action.position.x[1] - action.position.x[0]); var yPercent = (y - action.position.y[0]) / (action.position.y[1] - action.position.y[0]); animationItem.playSegments(action.frames, true); animationItem.goToAndStop(Math.ceil((xPercent + yPercent) / 2 * (action.frames[1] - action.frames[0])), true); } if (action.type === "loop") { animationItem.playSegments(action.frames, true); } if (action.type === "play") { // Play: Reset segments and continue playing full animation from current position if (animationItem.isPaused) { animationItem.resetSegments(false); } animationItem.playSegments(action.frames); } if (action.type === "stop") { animationItem.goToAndStop(action.frames[0], true); } }; var mouseMoveHandler = function mouseMoveHandler(ev) { handleCursor(ev.clientX, ev.clientY); }; var mouseOutHandler = function mouseOutHandler() { handleCursor(-1, -1); }; wrapper.addEventListener("mousemove", mouseMoveHandler); wrapper.addEventListener("mouseout", mouseOutHandler); return function () { wrapper.removeEventListener("mousemove", mouseMoveHandler); wrapper.removeEventListener("mouseout", mouseOutHandler); }; }; switch (mode) { case "scroll": return scrollModeHandler(); case "cursor": return cursorModeHandler(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [mode, animationItem]); }; var useLottieInteractivity = function useLottieInteractivity(_ref4) { var actions = _ref4.actions, mode = _ref4.mode, lottieObj = _ref4.lottieObj; var animationItem = lottieObj.animationItem, View = lottieObj.View, animationContainerRef = lottieObj.animationContainerRef; useInitInteractivity({ actions: actions, animationItem: animationItem, mode: mode, wrapperRef: animationContainerRef }); return View; }; var _excluded = ["style", "interactivity"]; var Lottie = function Lottie(props) { var _a, _b, _c; var style = props.style, interactivity = props.interactivity, lottieProps = _objectWithoutProperties(props, _excluded); /** * Initialize the 'useLottie' hook */ var _useLottie = useLottie(lottieProps, style), View = _useLottie.View, play = _useLottie.play, stop = _useLottie.stop, pause = _useLottie.pause, setSpeed = _useLottie.setSpeed, goToAndStop = _useLottie.goToAndStop, goToAndPlay = _useLottie.goToAndPlay, setDirection = _useLottie.setDirection, playSegments = _useLottie.playSegments, setSubframe = _useLottie.setSubframe, getDuration = _useLottie.getDuration, destroy = _useLottie.destroy, animationContainerRef = _useLottie.animationContainerRef, animationLoaded = _useLottie.animationLoaded, animationItem = _useLottie.animationItem; /** * Make the hook variables/methods available through the provided 'lottieRef' */ React.useEffect(function () { if (props.lottieRef) { props.lottieRef.current = { play: play, stop: stop, pause: pause, setSpeed: setSpeed, goToAndPlay: goToAndPlay, goToAndStop: goToAndStop, setDirection: setDirection, playSegments: playSegments, setSubframe: setSubframe, getDuration: getDuration, destroy: destroy, animationContainerRef: animationContainerRef, animationLoaded: animationLoaded, animationItem: animationItem }; } // eslint-disable-next-line react-hooks/exhaustive-deps }, [(_a = props.lottieRef) === null || _a === void 0 ? void 0 : _a.current]); return useLottieInteractivity({ lottieObj: { View: View, play: play, stop: stop, pause: pause, setSpeed: setSpeed, goToAndStop: goToAndStop, goToAndPlay: goToAndPlay, setDirection: setDirection, playSegments: playSegments, setSubframe: setSubframe, getDuration: getDuration, destroy: destroy, animationContainerRef: animationContainerRef, animationLoaded: animationLoaded, animationItem: animationItem }, actions: (_b = interactivity === null || interactivity === void 0 ? void 0 : interactivity.actions) !== null && _b !== void 0 ? _b : [], mode: (_c = interactivity === null || interactivity === void 0 ? void 0 : interactivity.mode) !== null && _c !== void 0 ? _c : "scroll" }); }; Object.defineProperty(exports, 'LottiePlayer', { enumerable: true, get: function () { return lottie__default["default"]; } }); exports["default"] = Lottie; exports.useLottie = useLottie; exports.useLottieInteractivity = useLottieInteractivity; Object.defineProperty(exports, '__esModule', { value: true }); })); //# sourceMappingURL=index.umd.js.map /***/ }), /***/ "../node_modules/lottie-web/build/player/lottie.js": /*!*********************************************************!*\ !*** ../node_modules/lottie-web/build/player/lottie.js ***! \*********************************************************/ /***/ (function(module, exports, __webpack_require__) { (typeof document !== "undefined") && (typeof navigator !== "undefined") && (function (global, factory) { true ? module.exports = factory() : 0; })(this, (function () { 'use strict'; var svgNS = 'http://www.w3.org/2000/svg'; var locationHref = ''; var _useWebWorker = false; var initialDefaultFrame = -999999; var setWebWorker = function setWebWorker(flag) { _useWebWorker = !!flag; }; var getWebWorker = function getWebWorker() { return _useWebWorker; }; var setLocationHref = function setLocationHref(value) { locationHref = value; }; var getLocationHref = function getLocationHref() { return locationHref; }; function createTag(type) { // return {appendChild:function(){},setAttribute:function(){},style:{}} return document.createElement(type); } function extendPrototype(sources, destination) { var i; var len = sources.length; var sourcePrototype; for (i = 0; i < len; i += 1) { sourcePrototype = sources[i].prototype; for (var attr in sourcePrototype) { if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr]; } } } function getDescriptor(object, prop) { return Object.getOwnPropertyDescriptor(object, prop); } function createProxyFunction(prototype) { function ProxyFunction() {} ProxyFunction.prototype = prototype; return ProxyFunction; } // import Howl from '../../3rd_party/howler'; var audioControllerFactory = function () { function AudioController(audioFactory) { this.audios = []; this.audioFactory = audioFactory; this._volume = 1; this._isMuted = false; } AudioController.prototype = { addAudio: function addAudio(audio) { this.audios.push(audio); }, pause: function pause() { var i; var len = this.audios.length; for (i = 0; i < len; i += 1) { this.audios[i].pause(); } }, resume: function resume() { var i; var len = this.audios.length; for (i = 0; i < len; i += 1) { this.audios[i].resume(); } }, setRate: function setRate(rateValue) { var i; var len = this.audios.length; for (i = 0; i < len; i += 1) { this.audios[i].setRate(rateValue); } }, createAudio: function createAudio(assetPath) { if (this.audioFactory) { return this.audioFactory(assetPath); } if (window.Howl) { return new window.Howl({ src: [assetPath] }); } return { isPlaying: false, play: function play() { this.isPlaying = true; }, seek: function seek() { this.isPlaying = false; }, playing: function playing() {}, rate: function rate() {}, setVolume: function setVolume() {} }; }, setAudioFactory: function setAudioFactory(audioFactory) { this.audioFactory = audioFactory; }, setVolume: function setVolume(value) { this._volume = value; this._updateVolume(); }, mute: function mute() { this._isMuted = true; this._updateVolume(); }, unmute: function unmute() { this._isMuted = false; this._updateVolume(); }, getVolume: function getVolume() { return this._volume; }, _updateVolume: function _updateVolume() { var i; var len = this.audios.length; for (i = 0; i < len; i += 1) { this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1)); } } }; return function () { return new AudioController(); }; }(); var createTypedArray = function () { function createRegularArray(type, len) { var i = 0; var arr = []; var value; switch (type) { case 'int16': case 'uint8c': value = 1; break; default: value = 1.1; break; } for (i = 0; i < len; i += 1) { arr.push(value); } return arr; } function createTypedArrayFactory(type, len) { if (type === 'float32') { return new Float32Array(len); } if (type === 'int16') { return new Int16Array(len); } if (type === 'uint8c') { return new Uint8ClampedArray(len); } return createRegularArray(type, len); } if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') { return createTypedArrayFactory; } return createRegularArray; }(); function createSizedArray(len) { return Array.apply(null, { length: len }); } function _typeof$6(o) { "@babel/helpers - typeof"; return _typeof$6 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$6(o); } var subframeEnabled = true; var expressionsPlugin = null; var expressionsInterfaces = null; var idPrefix$1 = ''; var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); var _shouldRoundValues = false; var bmPow = Math.pow; var bmSqrt = Math.sqrt; var bmFloor = Math.floor; var bmMax = Math.max; var bmMin = Math.min; var BMMath = {}; (function () { 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']; var i; var len = propertyNames.length; for (i = 0; i < len; i += 1) { BMMath[propertyNames[i]] = Math[propertyNames[i]]; } })(); function ProjectInterface$1() { return {}; } BMMath.random = Math.random; BMMath.abs = function (val) { var tOfVal = _typeof$6(val); if (tOfVal === 'object' && val.length) { var absArr = createSizedArray(val.length); var i; var len = val.length; for (i = 0; i < len; i += 1) { absArr[i] = Math.abs(val[i]); } return absArr; } return Math.abs(val); }; var defaultCurveSegments = 150; var degToRads = Math.PI / 180; var roundCorner = 0.5519; function roundValues(flag) { _shouldRoundValues = !!flag; } function bmRnd(value) { if (_shouldRoundValues) { return Math.round(value); } return value; } function styleDiv(element) { element.style.position = 'absolute'; element.style.top = 0; element.style.left = 0; element.style.display = 'block'; element.style.transformOrigin = '0 0'; element.style.webkitTransformOrigin = '0 0'; element.style.backfaceVisibility = 'visible'; element.style.webkitBackfaceVisibility = 'visible'; element.style.transformStyle = 'preserve-3d'; element.style.webkitTransformStyle = 'preserve-3d'; element.style.mozTransformStyle = 'preserve-3d'; } function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) { this.type = type; this.currentTime = currentTime; this.totalTime = totalTime; this.direction = frameMultiplier < 0 ? -1 : 1; } function BMCompleteEvent(type, frameMultiplier) { this.type = type; this.direction = frameMultiplier < 0 ? -1 : 1; } function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) { this.type = type; this.currentLoop = currentLoop; this.totalLoops = totalLoops; this.direction = frameMultiplier < 0 ? -1 : 1; } function BMSegmentStartEvent(type, firstFrame, totalFrames) { this.type = type; this.firstFrame = firstFrame; this.totalFrames = totalFrames; } function BMDestroyEvent(type, target) { this.type = type; this.target = target; } function BMRenderFrameErrorEvent(nativeError, currentTime) { this.type = 'renderFrameError'; this.nativeError = nativeError; this.currentTime = currentTime; } function BMConfigErrorEvent(nativeError) { this.type = 'configError'; this.nativeError = nativeError; } function BMAnimationConfigErrorEvent(type, nativeError) { this.type = type; this.nativeError = nativeError; } var createElementID = function () { var _count = 0; return function createID() { _count += 1; return idPrefix$1 + '__lottie_element_' + _count; }; }(); function HSVtoRGB(h, s, v) { var r; var g; var b; var i; var f; var p; var q; var t; i = Math.floor(h * 6); f = h * 6 - i; p = v * (1 - s); q = v * (1 - f * s); t = v * (1 - (1 - f) * s); switch (i % 6) { case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; default: break; } return [r, g, b]; } function RGBtoHSV(r, g, b) { var max = Math.max(r, g, b); var min = Math.min(r, g, b); var d = max - min; var h; var s = max === 0 ? 0 : d / max; var v = max / 255; switch (max) { case min: h = 0; break; case r: h = g - b + d * (g < b ? 6 : 0); h /= 6 * d; break; case g: h = b - r + d * 2; h /= 6 * d; break; case b: h = r - g + d * 4; h /= 6 * d; break; default: break; } return [h, s, v]; } function addSaturationToRGB(color, offset) { var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); hsv[1] += offset; if (hsv[1] > 1) { hsv[1] = 1; } else if (hsv[1] <= 0) { hsv[1] = 0; } return HSVtoRGB(hsv[0], hsv[1], hsv[2]); } function addBrightnessToRGB(color, offset) { var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); hsv[2] += offset; if (hsv[2] > 1) { hsv[2] = 1; } else if (hsv[2] < 0) { hsv[2] = 0; } return HSVtoRGB(hsv[0], hsv[1], hsv[2]); } function addHueToRGB(color, offset) { var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); hsv[0] += offset / 360; if (hsv[0] > 1) { hsv[0] -= 1; } else if (hsv[0] < 0) { hsv[0] += 1; } return HSVtoRGB(hsv[0], hsv[1], hsv[2]); } var rgbToHex = function () { var colorMap = []; var i; var hex; for (i = 0; i < 256; i += 1) { hex = i.toString(16); colorMap[i] = hex.length === 1 ? '0' + hex : hex; } return function (r, g, b) { if (r < 0) { r = 0; } if (g < 0) { g = 0; } if (b < 0) { b = 0; } return '#' + colorMap[r] + colorMap[g] + colorMap[b]; }; }(); var setSubframeEnabled = function setSubframeEnabled(flag) { subframeEnabled = !!flag; }; var getSubframeEnabled = function getSubframeEnabled() { return subframeEnabled; }; var setExpressionsPlugin = function setExpressionsPlugin(value) { expressionsPlugin = value; }; var getExpressionsPlugin = function getExpressionsPlugin() { return expressionsPlugin; }; var setExpressionInterfaces = function setExpressionInterfaces(value) { expressionsInterfaces = value; }; var getExpressionInterfaces = function getExpressionInterfaces() { return expressionsInterfaces; }; var setDefaultCurveSegments = function setDefaultCurveSegments(value) { defaultCurveSegments = value; }; var getDefaultCurveSegments = function getDefaultCurveSegments() { return defaultCurveSegments; }; var setIdPrefix = function setIdPrefix(value) { idPrefix$1 = value; }; var getIdPrefix = function getIdPrefix() { return idPrefix$1; }; function createNS(type) { // return {appendChild:function(){},setAttribute:function(){},style:{}} return document.createElementNS(svgNS, type); } function _typeof$5(o) { "@babel/helpers - typeof"; return _typeof$5 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$5(o); } var dataManager = function () { var _counterId = 1; var processes = []; var workerFn; var workerInstance; var workerProxy = { onmessage: function onmessage() {}, postMessage: function postMessage(path) { workerFn({ data: path }); } }; var _workerSelf = { postMessage: function postMessage(data) { workerProxy.onmessage({ data: data }); } }; function createWorker(fn) { if (window.Worker && window.Blob && getWebWorker()) { var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], { type: 'text/javascript' }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' }); var url = URL.createObjectURL(blob); return new Worker(url); } workerFn = fn; return workerProxy; } function setupWorker() { if (!workerInstance) { workerInstance = createWorker(function workerStart(e) { function dataFunctionManager() { function completeLayers(layers, comps) { var layerData; var i; var len = layers.length; var j; var jLen; var k; var kLen; for (i = 0; i < len; i += 1) { layerData = layers[i]; if ('ks' in layerData && !layerData.completed) { layerData.completed = true; if (layerData.hasMask) { var maskProps = layerData.masksProperties; jLen = maskProps.length; for (j = 0; j < jLen; j += 1) { if (maskProps[j].pt.k.i) { convertPathsToAbsoluteValues(maskProps[j].pt.k); } else { kLen = maskProps[j].pt.k.length; for (k = 0; k < kLen; k += 1) { if (maskProps[j].pt.k[k].s) { convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]); } if (maskProps[j].pt.k[k].e) { convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]); } } } } } if (layerData.ty === 0) { layerData.layers = findCompLayers(layerData.refId, comps); completeLayers(layerData.layers, comps); } else if (layerData.ty === 4) { completeShapes(layerData.shapes); } else if (layerData.ty === 5) { completeText(layerData); } } } } function completeChars(chars, assets) { if (chars) { var i = 0; var len = chars.length; for (i = 0; i < len; i += 1) { if (chars[i].t === 1) { // var compData = findComp(chars[i].data.refId, assets); chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0; // chars[i].data.op = 99999; // chars[i].data.st = 0; // chars[i].data.sr = 1; // chars[i].w = compData.w; // chars[i].data.ks = { // a: { k: [0, 0, 0], a: 0 }, // p: { k: [0, -compData.h, 0], a: 0 }, // r: { k: 0, a: 0 }, // s: { k: [100, 100], a: 0 }, // o: { k: 100, a: 0 }, // }; completeLayers(chars[i].data.layers, assets); } } } } function findComp(id, comps) { var i = 0; var len = comps.length; while (i < len) { if (comps[i].id === id) { return comps[i]; } i += 1; } return null; } function findCompLayers(id, comps) { var comp = findComp(id, comps); if (comp) { if (!comp.layers.__used) { comp.layers.__used = true; return comp.layers; } return JSON.parse(JSON.stringify(comp.layers)); } return null; } function completeShapes(arr) { var i; var len = arr.length; var j; var jLen; for (i = len - 1; i >= 0; i -= 1) { if (arr[i].ty === 'sh') { if (arr[i].ks.k.i) { convertPathsToAbsoluteValues(arr[i].ks.k); } else { jLen = arr[i].ks.k.length; for (j = 0; j < jLen; j += 1) { if (arr[i].ks.k[j].s) { convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]); } if (arr[i].ks.k[j].e) { convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]); } } } } else if (arr[i].ty === 'gr') { completeShapes(arr[i].it); } } } function convertPathsToAbsoluteValues(path) { var i; var len = path.i.length; for (i = 0; i < len; i += 1) { path.i[i][0] += path.v[i][0]; path.i[i][1] += path.v[i][1]; path.o[i][0] += path.v[i][0]; path.o[i][1] += path.v[i][1]; } } function checkVersion(minimum, animVersionString) { var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100]; if (minimum[0] > animVersion[0]) { return true; } if (animVersion[0] > minimum[0]) { return false; } if (minimum[1] > animVersion[1]) { return true; } if (animVersion[1] > minimum[1]) { return false; } if (minimum[2] > animVersion[2]) { return true; } if (animVersion[2] > minimum[2]) { return false; } return null; } var checkText = function () { var minimumVersion = [4, 4, 14]; function updateTextLayer(textLayer) { var documentData = textLayer.t.d; textLayer.t.d = { k: [{ s: documentData, t: 0 }] }; } function iterateLayers(layers) { var i; var len = layers.length; for (i = 0; i < len; i += 1) { if (layers[i].ty === 5) { updateTextLayer(layers[i]); } } } return function (animationData) { if (checkVersion(minimumVersion, animationData.v)) { iterateLayers(animationData.layers); if (animationData.assets) { var i; var len = animationData.assets.length; for (i = 0; i < len; i += 1) { if (animationData.assets[i].layers) { iterateLayers(animationData.assets[i].layers); } } } } }; }(); var checkChars = function () { var minimumVersion = [4, 7, 99]; return function (animationData) { if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) { var i; var len = animationData.chars.length; for (i = 0; i < len; i += 1) { var charData = animationData.chars[i]; if (charData.data && charData.data.shapes) { completeShapes(charData.data.shapes); charData.data.ip = 0; charData.data.op = 99999; charData.data.st = 0; charData.data.sr = 1; charData.data.ks = { p: { k: [0, 0], a: 0 }, s: { k: [100, 100], a: 0 }, a: { k: [0, 0], a: 0 }, r: { k: 0, a: 0 }, o: { k: 100, a: 0 } }; if (!animationData.chars[i].t) { charData.data.shapes.push({ ty: 'no' }); charData.data.shapes[0].it.push({ p: { k: [0, 0], a: 0 }, s: { k: [100, 100], a: 0 }, a: { k: [0, 0], a: 0 }, r: { k: 0, a: 0 }, o: { k: 100, a: 0 }, sk: { k: 0, a: 0 }, sa: { k: 0, a: 0 }, ty: 'tr' }); } } } } }; }(); var checkPathProperties = function () { var minimumVersion = [5, 7, 15]; function updateTextLayer(textLayer) { var pathData = textLayer.t.p; if (typeof pathData.a === 'number') { pathData.a = { a: 0, k: pathData.a }; } if (typeof pathData.p === 'number') { pathData.p = { a: 0, k: pathData.p }; } if (typeof pathData.r === 'number') { pathData.r = { a: 0, k: pathData.r }; } } function iterateLayers(layers) { var i; var len = layers.length; for (i = 0; i < len; i += 1) { if (layers[i].ty === 5) { updateTextLayer(layers[i]); } } } return function (animationData) { if (checkVersion(minimumVersion, animationData.v)) { iterateLayers(animationData.layers); if (animationData.assets) { var i; var len = animationData.assets.length; for (i = 0; i < len; i += 1) { if (animationData.assets[i].layers) { iterateLayers(animationData.assets[i].layers); } } } } }; }(); var checkColors = function () { var minimumVersion = [4, 1, 9]; function iterateShapes(shapes) { var i; var len = shapes.length; var j; var jLen; for (i = 0; i < len; i += 1) { if (shapes[i].ty === 'gr') { iterateShapes(shapes[i].it); } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') { if (shapes[i].c.k && shapes[i].c.k[0].i) { jLen = shapes[i].c.k.length; for (j = 0; j < jLen; j += 1) { if (shapes[i].c.k[j].s) { shapes[i].c.k[j].s[0] /= 255; shapes[i].c.k[j].s[1] /= 255; shapes[i].c.k[j].s[2] /= 255; shapes[i].c.k[j].s[3] /= 255; } if (shapes[i].c.k[j].e) { shapes[i].c.k[j].e[0] /= 255; shapes[i].c.k[j].e[1] /= 255; shapes[i].c.k[j].e[2] /= 255; shapes[i].c.k[j].e[3] /= 255; } } } else { shapes[i].c.k[0] /= 255; shapes[i].c.k[1] /= 255; shapes[i].c.k[2] /= 255; shapes[i].c.k[3] /= 255; } } } } function iterateLayers(layers) { var i; var len = layers.length; for (i = 0; i < len; i += 1) { if (layers[i].ty === 4) { iterateShapes(layers[i].shapes); } } } return function (animationData) { if (checkVersion(minimumVersion, animationData.v)) { iterateLayers(animationData.layers); if (animationData.assets) { var i; var len = animationData.assets.length; for (i = 0; i < len; i += 1) { if (animationData.assets[i].layers) { iterateLayers(animationData.assets[i].layers); } } } } }; }(); var checkShapes = function () { var minimumVersion = [4, 4, 18]; function completeClosingShapes(arr) { var i; var len = arr.length; var j; var jLen; for (i = len - 1; i >= 0; i -= 1) { if (arr[i].ty === 'sh') { if (arr[i].ks.k.i) { arr[i].ks.k.c = arr[i].closed; } else { jLen = arr[i].ks.k.length; for (j = 0; j < jLen; j += 1) { if (arr[i].ks.k[j].s) { arr[i].ks.k[j].s[0].c = arr[i].closed; } if (arr[i].ks.k[j].e) { arr[i].ks.k[j].e[0].c = arr[i].closed; } } } } else if (arr[i].ty === 'gr') { completeClosingShapes(arr[i].it); } } } function iterateLayers(layers) { var layerData; var i; var len = layers.length; var j; var jLen; var k; var kLen; for (i = 0; i < len; i += 1) { layerData = layers[i]; if (layerData.hasMask) { var maskProps = layerData.masksProperties; jLen = maskProps.length; for (j = 0; j < jLen; j += 1) { if (maskProps[j].pt.k.i) { maskProps[j].pt.k.c = maskProps[j].cl; } else { kLen = maskProps[j].pt.k.length; for (k = 0; k < kLen; k += 1) { if (maskProps[j].pt.k[k].s) { maskProps[j].pt.k[k].s[0].c = maskProps[j].cl; } if (maskProps[j].pt.k[k].e) { maskProps[j].pt.k[k].e[0].c = maskProps[j].cl; } } } } } if (layerData.ty === 4) { completeClosingShapes(layerData.shapes); } } } return function (animationData) { if (checkVersion(minimumVersion, animationData.v)) { iterateLayers(animationData.layers); if (animationData.assets) { var i; var len = animationData.assets.length; for (i = 0; i < len; i += 1) { if (animationData.assets[i].layers) { iterateLayers(animationData.assets[i].layers); } } } } }; }(); function completeData(animationData) { if (animationData.__complete) { return; } checkColors(animationData); checkText(animationData); checkChars(animationData); checkPathProperties(animationData); checkShapes(animationData); completeLayers(animationData.layers, animationData.assets); completeChars(animationData.chars, animationData.assets); animationData.__complete = true; } function completeText(data) { if (data.t.a.length === 0 && !('m' in data.t.p)) { // data.singleShape = true; } } var moduleOb = {}; moduleOb.completeData = completeData; moduleOb.checkColors = checkColors; moduleOb.checkChars = checkChars; moduleOb.checkPathProperties = checkPathProperties; moduleOb.checkShapes = checkShapes; moduleOb.completeLayers = completeLayers; return moduleOb; } if (!_workerSelf.dataManager) { _workerSelf.dataManager = dataFunctionManager(); } if (!_workerSelf.assetLoader) { _workerSelf.assetLoader = function () { function formatResponse(xhr) { // using typeof doubles the time of execution of this method, // so if available, it's better to use the header to validate the type var contentTypeHeader = xhr.getResponseHeader('content-type'); if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) { return xhr.response; } if (xhr.response && _typeof$5(xhr.response) === 'object') { return xhr.response; } if (xhr.response && typeof xhr.response === 'string') { return JSON.parse(xhr.response); } if (xhr.responseText) { return JSON.parse(xhr.responseText); } return null; } function loadAsset(path, fullPath, callback, errorCallback) { var response; var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break. try { // This crashes on Android WebView prior to KitKat xhr.responseType = 'json'; } catch (err) {} // eslint-disable-line no-empty xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { response = formatResponse(xhr); callback(response); } else { try { response = formatResponse(xhr); callback(response); } catch (err) { if (errorCallback) { errorCallback(err); } } } } }; try { // Hack to workaround banner validation xhr.open(['G', 'E', 'T'].join(''), path, true); } catch (error) { // Hack to workaround banner validation xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true); } xhr.send(); } return { load: loadAsset }; }(); } if (e.data.type === 'loadAnimation') { _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) { _workerSelf.dataManager.completeData(data); _workerSelf.postMessage({ id: e.data.id, payload: data, status: 'success' }); }, function () { _workerSelf.postMessage({ id: e.data.id, status: 'error' }); }); } else if (e.data.type === 'complete') { var animation = e.data.animation; _workerSelf.dataManager.completeData(animation); _workerSelf.postMessage({ id: e.data.id, payload: animation, status: 'success' }); } else if (e.data.type === 'loadData') { _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) { _workerSelf.postMessage({ id: e.data.id, payload: data, status: 'success' }); }, function () { _workerSelf.postMessage({ id: e.data.id, status: 'error' }); }); } }); workerInstance.onmessage = function (event) { var data = event.data; var id = data.id; var process = processes[id]; processes[id] = null; if (data.status === 'success') { process.onComplete(data.payload); } else if (process.onError) { process.onError(); } }; } } function createProcess(onComplete, onError) { _counterId += 1; var id = 'processId_' + _counterId; processes[id] = { onComplete: onComplete, onError: onError }; return id; } function loadAnimation(path, onComplete, onError) { setupWorker(); var processId = createProcess(onComplete, onError); workerInstance.postMessage({ type: 'loadAnimation', path: path, fullPath: window.location.origin + window.location.pathname, id: processId }); } function loadData(path, onComplete, onError) { setupWorker(); var processId = createProcess(onComplete, onError); workerInstance.postMessage({ type: 'loadData', path: path, fullPath: window.location.origin + window.location.pathname, id: processId }); } function completeAnimation(anim, onComplete, onError) { setupWorker(); var processId = createProcess(onComplete, onError); workerInstance.postMessage({ type: 'complete', animation: anim, id: processId }); } return { loadAnimation: loadAnimation, loadData: loadData, completeAnimation: completeAnimation }; }(); var ImagePreloader = function () { var proxyImage = function () { var canvas = createTag('canvas'); canvas.width = 1; canvas.height = 1; var ctx = canvas.getContext('2d'); ctx.fillStyle = 'rgba(0,0,0,0)'; ctx.fillRect(0, 0, 1, 1); return canvas; }(); function imageLoaded() { this.loadedAssets += 1; if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { if (this.imagesLoadedCb) { this.imagesLoadedCb(null); } } } function footageLoaded() { this.loadedFootagesCount += 1; if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { if (this.imagesLoadedCb) { this.imagesLoadedCb(null); } } } function getAssetsPath(assetData, assetsPath, originalPath) { var path = ''; if (assetData.e) { path = assetData.p; } else if (assetsPath) { var imagePath = assetData.p; if (imagePath.indexOf('images/') !== -1) { imagePath = imagePath.split('/')[1]; } path = assetsPath + imagePath; } else { path = originalPath; path += assetData.u ? assetData.u : ''; path += assetData.p; } return path; } function testImageLoaded(img) { var _count = 0; var intervalId = setInterval(function () { var box = img.getBBox(); if (box.width || _count > 500) { this._imageLoaded(); clearInterval(intervalId); } _count += 1; }.bind(this), 50); } function createImageData(assetData) { var path = getAssetsPath(assetData, this.assetsPath, this.path); var img = createNS('image'); if (isSafari) { this.testImageLoaded(img); } else { img.addEventListener('load', this._imageLoaded, false); } img.addEventListener('error', function () { ob.img = proxyImage; this._imageLoaded(); }.bind(this), false); img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path); if (this._elementHelper.append) { this._elementHelper.append(img); } else { this._elementHelper.appendChild(img); } var ob = { img: img, assetData: assetData }; return ob; } function createImgData(assetData) { var path = getAssetsPath(assetData, this.assetsPath, this.path); var img = createTag('img'); img.crossOrigin = 'anonymous'; img.addEventListener('load', this._imageLoaded, false); img.addEventListener('error', function () { ob.img = proxyImage; this._imageLoaded(); }.bind(this), false); img.src = path; var ob = { img: img, assetData: assetData }; return ob; } function createFootageData(data) { var ob = { assetData: data }; var path = getAssetsPath(data, this.assetsPath, this.path); dataManager.loadData(path, function (footageData) { ob.img = footageData; this._footageLoaded(); }.bind(this), function () { ob.img = {}; this._footageLoaded(); }.bind(this)); return ob; } function loadAssets(assets, cb) { this.imagesLoadedCb = cb; var i; var len = assets.length; for (i = 0; i < len; i += 1) { if (!assets[i].layers) { if (!assets[i].t || assets[i].t === 'seq') { this.totalImages += 1; this.images.push(this._createImageData(assets[i])); } else if (assets[i].t === 3) { this.totalFootages += 1; this.images.push(this.createFootageData(assets[i])); } } } } function setPath(path) { this.path = path || ''; } function setAssetsPath(path) { this.assetsPath = path || ''; } function getAsset(assetData) { var i = 0; var len = this.images.length; while (i < len) { if (this.images[i].assetData === assetData) { return this.images[i].img; } i += 1; } return null; } function destroy() { this.imagesLoadedCb = null; this.images.length = 0; } function loadedImages() { return this.totalImages === this.loadedAssets; } function loadedFootages() { return this.totalFootages === this.loadedFootagesCount; } function setCacheType(type, elementHelper) { if (type === 'svg') { this._elementHelper = elementHelper; this._createImageData = this.createImageData.bind(this); } else { this._createImageData = this.createImgData.bind(this); } } function ImagePreloaderFactory() { this._imageLoaded = imageLoaded.bind(this); this._footageLoaded = footageLoaded.bind(this); this.testImageLoaded = testImageLoaded.bind(this); this.createFootageData = createFootageData.bind(this); this.assetsPath = ''; this.path = ''; this.totalImages = 0; this.totalFootages = 0; this.loadedAssets = 0; this.loadedFootagesCount = 0; this.imagesLoadedCb = null; this.images = []; } ImagePreloaderFactory.prototype = { loadAssets: loadAssets, setAssetsPath: setAssetsPath, setPath: setPath, loadedImages: loadedImages, loadedFootages: loadedFootages, destroy: destroy, getAsset: getAsset, createImgData: createImgData, createImageData: createImageData, imageLoaded: imageLoaded, footageLoaded: footageLoaded, setCacheType: setCacheType }; return ImagePreloaderFactory; }(); function BaseEvent() {} BaseEvent.prototype = { triggerEvent: function triggerEvent(eventName, args) { if (this._cbs[eventName]) { var callbacks = this._cbs[eventName]; for (var i = 0; i < callbacks.length; i += 1) { callbacks[i](args); } } }, addEventListener: function addEventListener(eventName, callback) { if (!this._cbs[eventName]) { this._cbs[eventName] = []; } this._cbs[eventName].push(callback); return function () { this.removeEventListener(eventName, callback); }.bind(this); }, removeEventListener: function removeEventListener(eventName, callback) { if (!callback) { this._cbs[eventName] = null; } else if (this._cbs[eventName]) { var i = 0; var len = this._cbs[eventName].length; while (i < len) { if (this._cbs[eventName][i] === callback) { this._cbs[eventName].splice(i, 1); i -= 1; len -= 1; } i += 1; } if (!this._cbs[eventName].length) { this._cbs[eventName] = null; } } } }; var markerParser = function () { function parsePayloadLines(payload) { var lines = payload.split('\r\n'); var keys = {}; var line; var keysCount = 0; for (var i = 0; i < lines.length; i += 1) { line = lines[i].split(':'); if (line.length === 2) { keys[line[0]] = line[1].trim(); keysCount += 1; } } if (keysCount === 0) { throw new Error(); } return keys; } return function (_markers) { var markers = []; for (var i = 0; i < _markers.length; i += 1) { var _marker = _markers[i]; var markerData = { time: _marker.tm, duration: _marker.dr }; try { markerData.payload = JSON.parse(_markers[i].cm); } catch (_) { try { markerData.payload = parsePayloadLines(_markers[i].cm); } catch (__) { markerData.payload = { name: _markers[i].cm }; } } markers.push(markerData); } return markers; }; }(); var ProjectInterface = function () { function registerComposition(comp) { this.compositions.push(comp); } return function () { function _thisProjectFunction(name) { var i = 0; var len = this.compositions.length; while (i < len) { if (this.compositions[i].data && this.compositions[i].data.nm === name) { if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) { this.compositions[i].prepareFrame(this.currentFrame); } return this.compositions[i].compInterface; } i += 1; } return null; } _thisProjectFunction.compositions = []; _thisProjectFunction.currentFrame = 0; _thisProjectFunction.registerComposition = registerComposition; return _thisProjectFunction; }; }(); var renderers = {}; var registerRenderer = function registerRenderer(key, value) { renderers[key] = value; }; function getRenderer(key) { return renderers[key]; } function getRegisteredRenderer() { // Returns canvas by default for compatibility if (renderers.canvas) { return 'canvas'; } // Returns any renderer that is registered for (var key in renderers) { if (renderers[key]) { return key; } } return ''; } function _typeof$4(o) { "@babel/helpers - typeof"; return _typeof$4 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$4(o); } var AnimationItem = function AnimationItem() { this._cbs = []; this.name = ''; this.path = ''; this.isLoaded = false; this.currentFrame = 0; this.currentRawFrame = 0; this.firstFrame = 0; this.totalFrames = 0; this.frameRate = 0; this.frameMult = 0; this.playSpeed = 1; this.playDirection = 1; this.playCount = 0; this.animationData = {}; this.assets = []; this.isPaused = true; this.autoplay = false; this.loop = true; this.renderer = null; this.animationID = createElementID(); this.assetsPath = ''; this.timeCompleted = 0; this.segmentPos = 0; this.isSubframeEnabled = getSubframeEnabled(); this.segments = []; this._idle = true; this._completedLoop = false; this.projectInterface = ProjectInterface(); this.imagePreloader = new ImagePreloader(); this.audioController = audioControllerFactory(); this.markers = []; this.configAnimation = this.configAnimation.bind(this); this.onSetupError = this.onSetupError.bind(this); this.onSegmentComplete = this.onSegmentComplete.bind(this); this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0); this.expressionsPlugin = getExpressionsPlugin(); }; extendPrototype([BaseEvent], AnimationItem); AnimationItem.prototype.setParams = function (params) { if (params.wrapper || params.container) { this.wrapper = params.wrapper || params.container; } var animType = 'svg'; if (params.animType) { animType = params.animType; } else if (params.renderer) { animType = params.renderer; } var RendererClass = getRenderer(animType); this.renderer = new RendererClass(this, params.rendererSettings); this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs); this.renderer.setProjectInterface(this.projectInterface); this.animType = animType; if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) { this.loop = true; } else if (params.loop === false) { this.loop = false; } else { this.loop = parseInt(params.loop, 10); } this.autoplay = 'autoplay' in params ? params.autoplay : true; this.name = params.name ? params.name : ''; this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true; this.assetsPath = params.assetsPath; this.initialSegment = params.initialSegment; if (params.audioFactory) { this.audioController.setAudioFactory(params.audioFactory); } if (params.animationData) { this.setupAnimation(params.animationData); } else if (params.path) { if (params.path.lastIndexOf('\\') !== -1) { this.path = params.path.substr(0, params.path.lastIndexOf('\\') + 1); } else { this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1); } this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1); this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json')); dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError); } }; AnimationItem.prototype.onSetupError = function () { this.trigger('data_failed'); }; AnimationItem.prototype.setupAnimation = function (data) { dataManager.completeAnimation(data, this.configAnimation); }; AnimationItem.prototype.setData = function (wrapper, animationData) { if (animationData) { if (_typeof$4(animationData) !== 'object') { animationData = JSON.parse(animationData); } } var params = { wrapper: wrapper, animationData: animationData }; var wrapperAttributes = wrapper.attributes; params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : ''; params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas'; var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : ''; if (loop === 'false') { params.loop = false; } else if (loop === 'true') { params.loop = true; } else if (loop !== '') { params.loop = parseInt(loop, 10); } var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true; params.autoplay = autoplay !== 'false'; params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : ''; var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : ''; if (prerender === 'false') { params.prerender = false; } if (!params.path) { this.trigger('destroy'); } else { this.setParams(params); } }; AnimationItem.prototype.includeLayers = function (data) { if (data.op > this.animationData.op) { this.animationData.op = data.op; this.totalFrames = Math.floor(data.op - this.animationData.ip); } var layers = this.animationData.layers; var i; var len = layers.length; var newLayers = data.layers; var j; var jLen = newLayers.length; for (j = 0; j < jLen; j += 1) { i = 0; while (i < len) { if (layers[i].id === newLayers[j].id) { layers[i] = newLayers[j]; break; } i += 1; } } if (data.chars || data.fonts) { this.renderer.globalData.fontManager.addChars(data.chars); this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs); } if (data.assets) { len = data.assets.length; for (i = 0; i < len; i += 1) { this.animationData.assets.push(data.assets[i]); } } this.animationData.__complete = false; dataManager.completeAnimation(this.animationData, this.onSegmentComplete); }; AnimationItem.prototype.onSegmentComplete = function (data) { this.animationData = data; var expressionsPlugin = getExpressionsPlugin(); if (expressionsPlugin) { expressionsPlugin.initExpressions(this); } this.loadNextSegment(); }; AnimationItem.prototype.loadNextSegment = function () { var segments = this.animationData.segments; if (!segments || segments.length === 0 || !this.autoloadSegments) { this.trigger('data_ready'); this.timeCompleted = this.totalFrames; return; } var segment = segments.shift(); this.timeCompleted = segment.time * this.frameRate; var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json'; this.segmentPos += 1; dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () { this.trigger('data_failed'); }.bind(this)); }; AnimationItem.prototype.loadSegments = function () { var segments = this.animationData.segments; if (!segments) { this.timeCompleted = this.totalFrames; } this.loadNextSegment(); }; AnimationItem.prototype.imagesLoaded = function () { this.trigger('loaded_images'); this.checkLoaded(); }; AnimationItem.prototype.preloadImages = function () { this.imagePreloader.setAssetsPath(this.assetsPath); this.imagePreloader.setPath(this.path); this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this)); }; AnimationItem.prototype.configAnimation = function (animData) { if (!this.renderer) { return; } try { this.animationData = animData; if (this.initialSegment) { this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]); this.firstFrame = Math.round(this.initialSegment[0]); } else { this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip); this.firstFrame = Math.round(this.animationData.ip); } this.renderer.configAnimation(animData); if (!animData.assets) { animData.assets = []; } this.assets = this.animationData.assets; this.frameRate = this.animationData.fr; this.frameMult = this.animationData.fr / 1000; this.renderer.searchExtraCompositions(animData.assets); this.markers = markerParser(animData.markers || []); this.trigger('config_ready'); this.preloadImages(); this.loadSegments(); this.updaFrameModifier(); this.waitForFontsLoaded(); if (this.isPaused) { this.audioController.pause(); } } catch (error) { this.triggerConfigError(error); } }; AnimationItem.prototype.waitForFontsLoaded = function () { if (!this.renderer) { return; } if (this.renderer.globalData.fontManager.isLoaded) { this.checkLoaded(); } else { setTimeout(this.waitForFontsLoaded.bind(this), 20); } }; AnimationItem.prototype.checkLoaded = function () { if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) { this.isLoaded = true; var expressionsPlugin = getExpressionsPlugin(); if (expressionsPlugin) { expressionsPlugin.initExpressions(this); } this.renderer.initItems(); setTimeout(function () { this.trigger('DOMLoaded'); }.bind(this), 0); this.gotoFrame(); if (this.autoplay) { this.play(); } } }; AnimationItem.prototype.resize = function (width, height) { // Adding this validation for backwards compatibility in case an event object was being passed down var _width = typeof width === 'number' ? width : undefined; var _height = typeof height === 'number' ? height : undefined; this.renderer.updateContainerSize(_width, _height); }; AnimationItem.prototype.setSubframe = function (flag) { this.isSubframeEnabled = !!flag; }; AnimationItem.prototype.gotoFrame = function () { this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) { this.currentFrame = this.timeCompleted; } this.trigger('enterFrame'); this.renderFrame(); this.trigger('drawnFrame'); }; AnimationItem.prototype.renderFrame = function () { if (this.isLoaded === false || !this.renderer) { return; } try { if (this.expressionsPlugin) { this.expressionsPlugin.resetFrame(); } this.renderer.renderFrame(this.currentFrame + this.firstFrame); } catch (error) { this.triggerRenderFrameError(error); } }; AnimationItem.prototype.play = function (name) { if (name && this.name !== name) { return; } if (this.isPaused === true) { this.isPaused = false; this.trigger('_play'); this.audioController.resume(); if (this._idle) { this._idle = false; this.trigger('_active'); } } }; AnimationItem.prototype.pause = function (name) { if (name && this.name !== name) { return; } if (this.isPaused === false) { this.isPaused = true; this.trigger('_pause'); this._idle = true; this.trigger('_idle'); this.audioController.pause(); } }; AnimationItem.prototype.togglePause = function (name) { if (name && this.name !== name) { return; } if (this.isPaused === true) { this.play(); } else { this.pause(); } }; AnimationItem.prototype.stop = function (name) { if (name && this.name !== name) { return; } this.pause(); this.playCount = 0; this._completedLoop = false; this.setCurrentRawFrameValue(0); }; AnimationItem.prototype.getMarkerData = function (markerName) { var marker; for (var i = 0; i < this.markers.length; i += 1) { marker = this.markers[i]; if (marker.payload && marker.payload.name === markerName) { return marker; } } return null; }; AnimationItem.prototype.goToAndStop = function (value, isFrame, name) { if (name && this.name !== name) { return; } var numValue = Number(value); if (isNaN(numValue)) { var marker = this.getMarkerData(value); if (marker) { this.goToAndStop(marker.time, true); } } else if (isFrame) { this.setCurrentRawFrameValue(value); } else { this.setCurrentRawFrameValue(value * this.frameModifier); } this.pause(); }; AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) { if (name && this.name !== name) { return; } var numValue = Number(value); if (isNaN(numValue)) { var marker = this.getMarkerData(value); if (marker) { if (!marker.duration) { this.goToAndStop(marker.time, true); } else { this.playSegments([marker.time, marker.time + marker.duration], true); } } } else { this.goToAndStop(numValue, isFrame, name); } this.play(); }; AnimationItem.prototype.advanceTime = function (value) { if (this.isPaused === true || this.isLoaded === false) { return; } var nextValue = this.currentRawFrame + value * this.frameModifier; var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations. // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop. if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) { if (!this.loop || this.playCount === this.loop) { if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) { _isComplete = true; nextValue = this.totalFrames - 1; } } else if (nextValue >= this.totalFrames) { this.playCount += 1; if (!this.checkSegments(nextValue % this.totalFrames)) { this.setCurrentRawFrameValue(nextValue % this.totalFrames); this._completedLoop = true; this.trigger('loopComplete'); } } else { this.setCurrentRawFrameValue(nextValue); } } else if (nextValue < 0) { if (!this.checkSegments(nextValue % this.totalFrames)) { if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { // eslint-disable-line no-plusplus this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames); if (!this._completedLoop) { this._completedLoop = true; } else { this.trigger('loopComplete'); } } else { _isComplete = true; nextValue = 0; } } } else { this.setCurrentRawFrameValue(nextValue); } if (_isComplete) { this.setCurrentRawFrameValue(nextValue); this.pause(); this.trigger('complete'); } }; AnimationItem.prototype.adjustSegment = function (arr, offset) { this.playCount = 0; if (arr[1] < arr[0]) { if (this.frameModifier > 0) { if (this.playSpeed < 0) { this.setSpeed(-this.playSpeed); } else { this.setDirection(-1); } } this.totalFrames = arr[0] - arr[1]; this.timeCompleted = this.totalFrames; this.firstFrame = arr[1]; this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset); } else if (arr[1] > arr[0]) { if (this.frameModifier < 0) { if (this.playSpeed < 0) { this.setSpeed(-this.playSpeed); } else { this.setDirection(1); } } this.totalFrames = arr[1] - arr[0]; this.timeCompleted = this.totalFrames; this.firstFrame = arr[0]; this.setCurrentRawFrameValue(0.001 + offset); } this.trigger('segmentStart'); }; AnimationItem.prototype.setSegment = function (init, end) { var pendingFrame = -1; if (this.isPaused) { if (this.currentRawFrame + this.firstFrame < init) { pendingFrame = init; } else if (this.currentRawFrame + this.firstFrame > end) { pendingFrame = end - init; } } this.firstFrame = init; this.totalFrames = end - init; this.timeCompleted = this.totalFrames; if (pendingFrame !== -1) { this.goToAndStop(pendingFrame, true); } }; AnimationItem.prototype.playSegments = function (arr, forceFlag) { if (forceFlag) { this.segments.length = 0; } if (_typeof$4(arr[0]) === 'object') { var i; var len = arr.length; for (i = 0; i < len; i += 1) { this.segments.push(arr[i]); } } else { this.segments.push(arr); } if (this.segments.length && forceFlag) { this.adjustSegment(this.segments.shift(), 0); } if (this.isPaused) { this.play(); } }; AnimationItem.prototype.resetSegments = function (forceFlag) { this.segments.length = 0; this.segments.push([this.animationData.ip, this.animationData.op]); if (forceFlag) { this.checkSegments(0); } }; AnimationItem.prototype.checkSegments = function (offset) { if (this.segments.length) { this.adjustSegment(this.segments.shift(), offset); return true; } return false; }; AnimationItem.prototype.destroy = function (name) { if (name && this.name !== name || !this.renderer) { return; } this.renderer.destroy(); this.imagePreloader.destroy(); this.trigger('destroy'); this._cbs = null; this.onEnterFrame = null; this.onLoopComplete = null; this.onComplete = null; this.onSegmentStart = null; this.onDestroy = null; this.renderer = null; this.expressionsPlugin = null; this.imagePreloader = null; this.projectInterface = null; }; AnimationItem.prototype.setCurrentRawFrameValue = function (value) { this.currentRawFrame = value; this.gotoFrame(); }; AnimationItem.prototype.setSpeed = function (val) { this.playSpeed = val; this.updaFrameModifier(); }; AnimationItem.prototype.setDirection = function (val) { this.playDirection = val < 0 ? -1 : 1; this.updaFrameModifier(); }; AnimationItem.prototype.setLoop = function (isLooping) { this.loop = isLooping; }; AnimationItem.prototype.setVolume = function (val, name) { if (name && this.name !== name) { return; } this.audioController.setVolume(val); }; AnimationItem.prototype.getVolume = function () { return this.audioController.getVolume(); }; AnimationItem.prototype.mute = function (name) { if (name && this.name !== name) { return; } this.audioController.mute(); }; AnimationItem.prototype.unmute = function (name) { if (name && this.name !== name) { return; } this.audioController.unmute(); }; AnimationItem.prototype.updaFrameModifier = function () { this.frameModifier = this.frameMult * this.playSpeed * this.playDirection; this.audioController.setRate(this.playSpeed * this.playDirection); }; AnimationItem.prototype.getPath = function () { return this.path; }; AnimationItem.prototype.getAssetsPath = function (assetData) { var path = ''; if (assetData.e) { path = assetData.p; } else if (this.assetsPath) { var imagePath = assetData.p; if (imagePath.indexOf('images/') !== -1) { imagePath = imagePath.split('/')[1]; } path = this.assetsPath + imagePath; } else { path = this.path; path += assetData.u ? assetData.u : ''; path += assetData.p; } return path; }; AnimationItem.prototype.getAssetData = function (id) { var i = 0; var len = this.assets.length; while (i < len) { if (id === this.assets[i].id) { return this.assets[i]; } i += 1; } return null; }; AnimationItem.prototype.hide = function () { this.renderer.hide(); }; AnimationItem.prototype.show = function () { this.renderer.show(); }; AnimationItem.prototype.getDuration = function (isFrame) { return isFrame ? this.totalFrames : this.totalFrames / this.frameRate; }; AnimationItem.prototype.updateDocumentData = function (path, documentData, index) { try { var element = this.renderer.getElementByPath(path); element.updateDocumentData(documentData, index); } catch (error) { // TODO: decide how to handle catch case } }; AnimationItem.prototype.trigger = function (name) { if (this._cbs && this._cbs[name]) { switch (name) { case 'enterFrame': this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier)); break; case 'drawnFrame': this.drawnFrameEvent.currentTime = this.currentFrame; this.drawnFrameEvent.totalTime = this.totalFrames; this.drawnFrameEvent.direction = this.frameModifier; this.triggerEvent(name, this.drawnFrameEvent); break; case 'loopComplete': this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult)); break; case 'complete': this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult)); break; case 'segmentStart': this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames)); break; case 'destroy': this.triggerEvent(name, new BMDestroyEvent(name, this)); break; default: this.triggerEvent(name); } } if (name === 'enterFrame' && this.onEnterFrame) { this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult)); } if (name === 'loopComplete' && this.onLoopComplete) { this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult)); } if (name === 'complete' && this.onComplete) { this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult)); } if (name === 'segmentStart' && this.onSegmentStart) { this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames)); } if (name === 'destroy' && this.onDestroy) { this.onDestroy.call(this, new BMDestroyEvent(name, this)); } }; AnimationItem.prototype.triggerRenderFrameError = function (nativeError) { var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame); this.triggerEvent('error', error); if (this.onError) { this.onError.call(this, error); } }; AnimationItem.prototype.triggerConfigError = function (nativeError) { var error = new BMConfigErrorEvent(nativeError, this.currentFrame); this.triggerEvent('error', error); if (this.onError) { this.onError.call(this, error); } }; var animationManager = function () { var moduleOb = {}; var registeredAnimations = []; var initTime = 0; var len = 0; var playingAnimationsNum = 0; var _stopped = true; var _isFrozen = false; function removeElement(ev) { var i = 0; var animItem = ev.target; while (i < len) { if (registeredAnimations[i].animation === animItem) { registeredAnimations.splice(i, 1); i -= 1; len -= 1; if (!animItem.isPaused) { subtractPlayingCount(); } } i += 1; } } function registerAnimation(element, animationData) { if (!element) { return null; } var i = 0; while (i < len) { if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) { return registeredAnimations[i].animation; } i += 1; } var animItem = new AnimationItem(); setupAnimation(animItem, element); animItem.setData(element, animationData); return animItem; } function getRegisteredAnimations() { var i; var lenAnims = registeredAnimations.length; var animations = []; for (i = 0; i < lenAnims; i += 1) { animations.push(registeredAnimations[i].animation); } return animations; } function addPlayingCount() { playingAnimationsNum += 1; activate(); } function subtractPlayingCount() { playingAnimationsNum -= 1; } function setupAnimation(animItem, element) { animItem.addEventListener('destroy', removeElement); animItem.addEventListener('_active', addPlayingCount); animItem.addEventListener('_idle', subtractPlayingCount); registeredAnimations.push({ elem: element, animation: animItem }); len += 1; } function loadAnimation(params) { var animItem = new AnimationItem(); setupAnimation(animItem, null); animItem.setParams(params); return animItem; } function setSpeed(val, animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.setSpeed(val, animation); } } function setDirection(val, animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.setDirection(val, animation); } } function play(animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.play(animation); } } function resume(nowTime) { var elapsedTime = nowTime - initTime; var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.advanceTime(elapsedTime); } initTime = nowTime; if (playingAnimationsNum && !_isFrozen) { window.requestAnimationFrame(resume); } else { _stopped = true; } } function first(nowTime) { initTime = nowTime; window.requestAnimationFrame(resume); } function pause(animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.pause(animation); } } function goToAndStop(value, isFrame, animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.goToAndStop(value, isFrame, animation); } } function stop(animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.stop(animation); } } function togglePause(animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.togglePause(animation); } } function destroy(animation) { var i; for (i = len - 1; i >= 0; i -= 1) { registeredAnimations[i].animation.destroy(animation); } } function searchAnimations(animationData, standalone, renderer) { var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin'))); var i; var lenAnims = animElements.length; for (i = 0; i < lenAnims; i += 1) { if (renderer) { animElements[i].setAttribute('data-bm-type', renderer); } registerAnimation(animElements[i], animationData); } if (standalone && lenAnims === 0) { if (!renderer) { renderer = 'svg'; } var body = document.getElementsByTagName('body')[0]; body.innerText = ''; var div = createTag('div'); div.style.width = '100%'; div.style.height = '100%'; div.setAttribute('data-bm-type', renderer); body.appendChild(div); registerAnimation(div, animationData); } } function resize() { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.resize(); } } function activate() { if (!_isFrozen && playingAnimationsNum) { if (_stopped) { window.requestAnimationFrame(first); _stopped = false; } } } function freeze() { _isFrozen = true; } function unfreeze() { _isFrozen = false; activate(); } function setVolume(val, animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.setVolume(val, animation); } } function mute(animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.mute(animation); } } function unmute(animation) { var i; for (i = 0; i < len; i += 1) { registeredAnimations[i].animation.unmute(animation); } } moduleOb.registerAnimation = registerAnimation; moduleOb.loadAnimation = loadAnimation; moduleOb.setSpeed = setSpeed; moduleOb.setDirection = setDirection; moduleOb.play = play; moduleOb.pause = pause; moduleOb.stop = stop; moduleOb.togglePause = togglePause; moduleOb.searchAnimations = searchAnimations; moduleOb.resize = resize; // moduleOb.start = start; moduleOb.goToAndStop = goToAndStop; moduleOb.destroy = destroy; moduleOb.freeze = freeze; moduleOb.unfreeze = unfreeze; moduleOb.setVolume = setVolume; moduleOb.mute = mute; moduleOb.unmute = unmute; moduleOb.getRegisteredAnimations = getRegisteredAnimations; return moduleOb; }(); /* eslint-disable */ var BezierFactory = function () { /** * BezierEasing - use bezier curve for transition easing function * by Gaëtan Renaudeau 2014 - 2015 – MIT License * * Credits: is based on Firefox's nsSMILKeySpline.cpp * Usage: * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ]) * spline.get(x) => returns the easing value | x must be in [0, 1] range * */ var ob = {}; ob.getBezierEasing = getBezierEasing; var beziers = {}; function getBezierEasing(a, b, c, d, nm) { var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\./g, 'p'); if (beziers[str]) { return beziers[str]; } var bezEasing = new BezierEasing([a, b, c, d]); beziers[str] = bezEasing; return bezEasing; } // These values are established by empiricism with tests (tradeoff: performance VS precision) var NEWTON_ITERATIONS = 4; var NEWTON_MIN_SLOPE = 0.001; var SUBDIVISION_PRECISION = 0.0000001; var SUBDIVISION_MAX_ITERATIONS = 10; var kSplineTableSize = 11; var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0); var float32ArraySupported = typeof Float32Array === 'function'; function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; } function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; } function C(aA1) { return 3.0 * aA1; } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. function calcBezier(aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2. function getSlope(aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); } function binarySubdivide(aX, aA, aB, mX1, mX2) { var currentX, currentT, i = 0; do { currentT = aA + (aB - aA) / 2.0; currentX = calcBezier(currentT, mX1, mX2) - aX; if (currentX > 0.0) { aB = currentT; } else { aA = currentT; } } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); return currentT; } function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) { for (var i = 0; i < NEWTON_ITERATIONS; ++i) { var currentSlope = getSlope(aGuessT, mX1, mX2); if (currentSlope === 0.0) return aGuessT; var currentX = calcBezier(aGuessT, mX1, mX2) - aX; aGuessT -= currentX / currentSlope; } return aGuessT; } /** * points is an array of [ mX1, mY1, mX2, mY2 ] */ function BezierEasing(points) { this._p = points; this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); this._precomputed = false; this.get = this.get.bind(this); } BezierEasing.prototype = { get: function get(x) { var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3]; if (!this._precomputed) this._precompute(); if (mX1 === mY1 && mX2 === mY2) return x; // linear // Because JavaScript number are imprecise, we should guarantee the extremes are right. if (x === 0) return 0; if (x === 1) return 1; return calcBezier(this._getTForX(x), mY1, mY2); }, // Private part _precompute: function _precompute() { var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3]; this._precomputed = true; if (mX1 !== mY1 || mX2 !== mY2) { this._calcSampleValues(); } }, _calcSampleValues: function _calcSampleValues() { var mX1 = this._p[0], mX2 = this._p[2]; for (var i = 0; i < kSplineTableSize; ++i) { this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); } }, /** * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection. */ _getTForX: function _getTForX(aX) { var mX1 = this._p[0], mX2 = this._p[2], mSampleValues = this._mSampleValues; var intervalStart = 0.0; var currentSample = 1; var lastSample = kSplineTableSize - 1; for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { intervalStart += kSampleStepSize; } --currentSample; // Interpolate to provide an initial guess for t var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]); var guessForT = intervalStart + dist * kSampleStepSize; var initialSlope = getSlope(guessForT, mX1, mX2); if (initialSlope >= NEWTON_MIN_SLOPE) { return newtonRaphsonIterate(aX, guessForT, mX1, mX2); } if (initialSlope === 0.0) { return guessForT; } return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); } }; return ob; }(); var pooling = function () { function _double(arr) { return arr.concat(createSizedArray(arr.length)); } return { "double": _double }; }(); var poolFactory = function () { return function (initialLength, _create, _release) { var _length = 0; var _maxLength = initialLength; var pool = createSizedArray(_maxLength); var ob = { newElement: newElement, release: release }; function newElement() { var element; if (_length) { _length -= 1; element = pool[_length]; } else { element = _create(); } return element; } function release(element) { if (_length === _maxLength) { pool = pooling["double"](pool); _maxLength *= 2; } if (_release) { _release(element); } pool[_length] = element; _length += 1; } return ob; }; }(); var bezierLengthPool = function () { function create() { return { addedLength: 0, percents: createTypedArray('float32', getDefaultCurveSegments()), lengths: createTypedArray('float32', getDefaultCurveSegments()) }; } return poolFactory(8, create); }(); var segmentsLengthPool = function () { function create() { return { lengths: [], totalLength: 0 }; } function release(element) { var i; var len = element.lengths.length; for (i = 0; i < len; i += 1) { bezierLengthPool.release(element.lengths[i]); } element.lengths.length = 0; } return poolFactory(8, create, release); }(); function bezFunction() { var math = Math; function pointOnLine2D(x1, y1, x2, y2, x3, y3) { var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1; return det1 > -0.001 && det1 < 0.001; } function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) { if (z1 === 0 && z2 === 0 && z3 === 0) { return pointOnLine2D(x1, y1, x2, y2, x3, y3); } var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2)); var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2)); var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2)); var diffDist; if (dist1 > dist2) { if (dist1 > dist3) { diffDist = dist1 - dist2 - dist3; } else { diffDist = dist3 - dist2 - dist1; } } else if (dist3 > dist2) { diffDist = dist3 - dist2 - dist1; } else { diffDist = dist2 - dist1 - dist3; } return diffDist > -0.0001 && diffDist < 0.0001; } var getBezierLength = function () { return function (pt1, pt2, pt3, pt4) { var curveSegments = getDefaultCurveSegments(); var k; var i; var len; var ptCoord; var perc; var addedLength = 0; var ptDistance; var point = []; var lastPoint = []; var lengthData = bezierLengthPool.newElement(); len = pt3.length; for (k = 0; k < curveSegments; k += 1) { perc = k / (curveSegments - 1); ptDistance = 0; for (i = 0; i < len; i += 1) { 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]; point[i] = ptCoord; if (lastPoint[i] !== null) { ptDistance += bmPow(point[i] - lastPoint[i], 2); } lastPoint[i] = point[i]; } if (ptDistance) { ptDistance = bmSqrt(ptDistance); addedLength += ptDistance; } lengthData.percents[k] = perc; lengthData.lengths[k] = addedLength; } lengthData.addedLength = addedLength; return lengthData; }; }(); function getSegmentsLength(shapeData) { var segmentsLength = segmentsLengthPool.newElement(); var closed = shapeData.c; var pathV = shapeData.v; var pathO = shapeData.o; var pathI = shapeData.i; var i; var len = shapeData._length; var lengths = segmentsLength.lengths; var totalLength = 0; for (i = 0; i < len - 1; i += 1) { lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]); totalLength += lengths[i].addedLength; } if (closed && len) { lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]); totalLength += lengths[i].addedLength; } segmentsLength.totalLength = totalLength; return segmentsLength; } function BezierData(length) { this.segmentLength = 0; this.points = new Array(length); } function PointData(partial, point) { this.partialLength = partial; this.point = point; } var buildBezierData = function () { var storedData = {}; return function (pt1, pt2, pt3, pt4) { var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\./g, 'p'); if (!storedData[bezierName]) { var curveSegments = getDefaultCurveSegments(); var k; var i; var len; var ptCoord; var perc; var addedLength = 0; var ptDistance; var point; var lastPoint = null; 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])) { curveSegments = 2; } var bezierData = new BezierData(curveSegments); len = pt3.length; for (k = 0; k < curveSegments; k += 1) { point = createSizedArray(len); perc = k / (curveSegments - 1); ptDistance = 0; for (i = 0; i < len; i += 1) { 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]; point[i] = ptCoord; if (lastPoint !== null) { ptDistance += bmPow(point[i] - lastPoint[i], 2); } } ptDistance = bmSqrt(ptDistance); addedLength += ptDistance; bezierData.points[k] = new PointData(ptDistance, point); lastPoint = point; } bezierData.segmentLength = addedLength; storedData[bezierName] = bezierData; } return storedData[bezierName]; }; }(); function getDistancePerc(perc, bezierData) { var percents = bezierData.percents; var lengths = bezierData.lengths; var len = percents.length; var initPos = bmFloor((len - 1) * perc); var lengthPos = perc * bezierData.addedLength; var lPerc = 0; if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) { return percents[initPos]; } var dir = lengths[initPos] > lengthPos ? -1 : 1; var flag = true; while (flag) { if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) { lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]); flag = false; } else { initPos += dir; } if (initPos < 0 || initPos >= len - 1) { // FIX for TypedArrays that don't store floating point values with enough accuracy if (initPos === len - 1) { return percents[initPos]; } flag = false; } } return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc; } function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) { var t1 = getDistancePerc(percent, bezierData); var u1 = 1 - t1; 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; 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; return [ptX, ptY]; } var bezierSegmentPoints = createTypedArray('float32', 8); function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) { if (startPerc < 0) { startPerc = 0; } else if (startPerc > 1) { startPerc = 1; } var t0 = getDistancePerc(startPerc, bezierData); endPerc = endPerc > 1 ? 1 : endPerc; var t1 = getDistancePerc(endPerc, bezierData); var i; var len = pt1.length; var u0 = 1 - t0; var u1 = 1 - t1; var u0u0u0 = u0 * u0 * u0; var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase var t0t0t0 = t0 * t0 * t0; // var u0u0u1 = u0 * u0 * u1; var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase var t0t0t1 = t0 * t0 * t1; // var u0u1u1 = u0 * u1 * u1; var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase var t0t1t1 = t0 * t1 * t1; // var u1u1u1 = u1 * u1 * u1; var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase var t1t1t1 = t1 * t1 * t1; for (i = 0; i < len; i += 1) { 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 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 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 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 } return bezierSegmentPoints; } return { getSegmentsLength: getSegmentsLength, getNewSegment: getNewSegment, getPointInSegment: getPointInSegment, buildBezierData: buildBezierData, pointOnLine2D: pointOnLine2D, pointOnLine3D: pointOnLine3D }; } var bez = bezFunction(); var initFrame = initialDefaultFrame; var mathAbs = Math.abs; function interpolateValue(frameNum, caching) { var offsetTime = this.offsetTime; var newValue; if (this.propType === 'multidimensional') { newValue = createTypedArray('float32', this.pv.length); } var iterationIndex = caching.lastIndex; var i = iterationIndex; var len = this.keyframes.length - 1; var flag = true; var keyData; var nextKeyData; var keyframeMetadata; while (flag) { keyData = this.keyframes[i]; nextKeyData = this.keyframes[i + 1]; if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) { if (keyData.h) { keyData = nextKeyData; } iterationIndex = 0; break; } if (nextKeyData.t - offsetTime > frameNum) { iterationIndex = i; break; } if (i < len - 1) { i += 1; } else { iterationIndex = 0; flag = false; } } keyframeMetadata = this.keyframesMetadata[i] || {}; var k; var kLen; var perc; var jLen; var j; var fnc; var nextKeyTime = nextKeyData.t - offsetTime; var keyTime = keyData.t - offsetTime; var endValue; if (keyData.to) { if (!keyframeMetadata.bezierData) { keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti); } var bezierData = keyframeMetadata.bezierData; if (frameNum >= nextKeyTime || frameNum < keyTime) { var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0; kLen = bezierData.points[ind].point.length; for (k = 0; k < kLen; k += 1) { newValue[k] = bezierData.points[ind].point[k]; } // caching._lastKeyframeIndex = -1; } else { if (keyframeMetadata.__fnct) { fnc = keyframeMetadata.__fnct; } else { fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get; keyframeMetadata.__fnct = fnc; } perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); var distanceInLine = bezierData.segmentLength * perc; var segmentPerc; var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0; j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0; flag = true; jLen = bezierData.points.length; while (flag) { addedLength += bezierData.points[j].partialLength; if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) { kLen = bezierData.points[j].point.length; for (k = 0; k < kLen; k += 1) { newValue[k] = bezierData.points[j].point[k]; } break; } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) { segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength; kLen = bezierData.points[j].point.length; for (k = 0; k < kLen; k += 1) { newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc; } break; } if (j < jLen - 1) { j += 1; } else { flag = false; } } caching._lastPoint = j; caching._lastAddedLength = addedLength - bezierData.points[j].partialLength; caching._lastKeyframeIndex = i; } } else { var outX; var outY; var inX; var inY; var keyValue; len = keyData.s.length; endValue = nextKeyData.s || keyData.e; if (this.sh && keyData.h !== 1) { if (frameNum >= nextKeyTime) { newValue[0] = endValue[0]; newValue[1] = endValue[1]; newValue[2] = endValue[2]; } else if (frameNum <= keyTime) { newValue[0] = keyData.s[0]; newValue[1] = keyData.s[1]; newValue[2] = keyData.s[2]; } else { var quatStart = createQuaternion(keyData.s); var quatEnd = createQuaternion(endValue); var time = (frameNum - keyTime) / (nextKeyTime - keyTime); quaternionToEuler(newValue, slerp(quatStart, quatEnd, time)); } } else { for (i = 0; i < len; i += 1) { if (keyData.h !== 1) { if (frameNum >= nextKeyTime) { perc = 1; } else if (frameNum < keyTime) { perc = 0; } else { if (keyData.o.x.constructor === Array) { if (!keyframeMetadata.__fnct) { keyframeMetadata.__fnct = []; } if (!keyframeMetadata.__fnct[i]) { outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i]; outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i]; inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i]; inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i]; fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; keyframeMetadata.__fnct[i] = fnc; } else { fnc = keyframeMetadata.__fnct[i]; } } else if (!keyframeMetadata.__fnct) { outX = keyData.o.x; outY = keyData.o.y; inX = keyData.i.x; inY = keyData.i.y; fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; keyData.keyframeMetadata = fnc; } else { fnc = keyframeMetadata.__fnct; } perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); } } endValue = nextKeyData.s || keyData.e; keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc; if (this.propType === 'multidimensional') { newValue[i] = keyValue; } else { newValue = keyValue; } } } } caching.lastIndex = iterationIndex; return newValue; } // based on @Toji's https://github.com/toji/gl-matrix/ function slerp(a, b, t) { var out = []; var ax = a[0]; var ay = a[1]; var az = a[2]; var aw = a[3]; var bx = b[0]; var by = b[1]; var bz = b[2]; var bw = b[3]; var omega; var cosom; var sinom; var scale0; var scale1; cosom = ax * bx + ay * by + az * bz + aw * bw; if (cosom < 0.0) { cosom = -cosom; bx = -bx; by = -by; bz = -bz; bw = -bw; } if (1.0 - cosom > 0.000001) { omega = Math.acos(cosom); sinom = Math.sin(omega); scale0 = Math.sin((1.0 - t) * omega) / sinom; scale1 = Math.sin(t * omega) / sinom; } else { scale0 = 1.0 - t; scale1 = t; } out[0] = scale0 * ax + scale1 * bx; out[1] = scale0 * ay + scale1 * by; out[2] = scale0 * az + scale1 * bz; out[3] = scale0 * aw + scale1 * bw; return out; } function quaternionToEuler(out, quat) { var qx = quat[0]; var qy = quat[1]; var qz = quat[2]; var qw = quat[3]; var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz); var attitude = Math.asin(2 * qx * qy + 2 * qz * qw); var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz); out[0] = heading / degToRads; out[1] = attitude / degToRads; out[2] = bank / degToRads; } function createQuaternion(values) { var heading = values[0] * degToRads; var attitude = values[1] * degToRads; var bank = values[2] * degToRads; var c1 = Math.cos(heading / 2); var c2 = Math.cos(attitude / 2); var c3 = Math.cos(bank / 2); var s1 = Math.sin(heading / 2); var s2 = Math.sin(attitude / 2); var s3 = Math.sin(bank / 2); var w = c1 * c2 * c3 - s1 * s2 * s3; var x = s1 * s2 * c3 + c1 * c2 * s3; var y = s1 * c2 * c3 + c1 * s2 * s3; var z = c1 * s2 * c3 - s1 * c2 * s3; return [x, y, z, w]; } function getValueAtCurrentTime() { var frameNum = this.comp.renderedFrame - this.offsetTime; var initTime = this.keyframes[0].t - this.offsetTime; var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) { if (this._caching.lastFrame >= frameNum) { this._caching._lastKeyframeIndex = -1; this._caching.lastIndex = 0; } var renderResult = this.interpolateValue(frameNum, this._caching); this.pv = renderResult; } this._caching.lastFrame = frameNum; return this.pv; } function setVValue(val) { var multipliedValue; if (this.propType === 'unidimensional') { multipliedValue = val * this.mult; if (mathAbs(this.v - multipliedValue) > 0.00001) { this.v = multipliedValue; this._mdf = true; } } else { var i = 0; var len = this.v.length; while (i < len) { multipliedValue = val[i] * this.mult; if (mathAbs(this.v[i] - multipliedValue) > 0.00001) { this.v[i] = multipliedValue; this._mdf = true; } i += 1; } } } function processEffectsSequence() { if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) { return; } if (this.lock) { this.setVValue(this.pv); return; } this.lock = true; this._mdf = this._isFirstFrame; var i; var len = this.effectsSequence.length; var finalValue = this.kf ? this.pv : this.data.k; for (i = 0; i < len; i += 1) { finalValue = this.effectsSequence[i](finalValue); } this.setVValue(finalValue); this._isFirstFrame = false; this.lock = false; this.frameId = this.elem.globalData.frameId; } function addEffect(effectFunction) { this.effectsSequence.push(effectFunction); this.container.addDynamicProperty(this); } function ValueProperty(elem, data, mult, container) { this.propType = 'unidimensional'; this.mult = mult || 1; this.data = data; this.v = mult ? data.k * mult : data.k; this.pv = data.k; this._mdf = false; this.elem = elem; this.container = container; this.comp = elem.comp; this.k = false; this.kf = false; this.vel = 0; this.effectsSequence = []; this._isFirstFrame = true; this.getValue = processEffectsSequence; this.setVValue = setVValue; this.addEffect = addEffect; } function MultiDimensionalProperty(elem, data, mult, container) { this.propType = 'multidimensional'; this.mult = mult || 1; this.data = data; this._mdf = false; this.elem = elem; this.container = container; this.comp = elem.comp; this.k = false; this.kf = false; this.frameId = -1; var i; var len = data.k.length; this.v = createTypedArray('float32', len); this.pv = createTypedArray('float32', len); this.vel = createTypedArray('float32', len); for (i = 0; i < len; i += 1) { this.v[i] = data.k[i] * this.mult; this.pv[i] = data.k[i]; } this._isFirstFrame = true; this.effectsSequence = []; this.getValue = processEffectsSequence; this.setVValue = setVValue; this.addEffect = addEffect; } function KeyframedValueProperty(elem, data, mult, container) { this.propType = 'unidimensional'; this.keyframes = data.k; this.keyframesMetadata = []; this.offsetTime = elem.data.st; this.frameId = -1; this._caching = { lastFrame: initFrame, lastIndex: 0, value: 0, _lastKeyframeIndex: -1 }; this.k = true; this.kf = true; this.data = data; this.mult = mult || 1; this.elem = elem; this.container = container; this.comp = elem.comp; this.v = initFrame; this.pv = initFrame; this._isFirstFrame = true; this.getValue = processEffectsSequence; this.setVValue = setVValue; this.interpolateValue = interpolateValue; this.effectsSequence = [getValueAtCurrentTime.bind(this)]; this.addEffect = addEffect; } function KeyframedMultidimensionalProperty(elem, data, mult, container) { this.propType = 'multidimensional'; var i; var len = data.k.length; var s; var e; var to; var ti; for (i = 0; i < len - 1; i += 1) { if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) { s = data.k[i].s; e = data.k[i + 1].s; to = data.k[i].to; ti = data.k[i].ti; 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])) { data.k[i].to = null; data.k[i].ti = null; } if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) { if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) { data.k[i].to = null; data.k[i].ti = null; } } } } this.effectsSequence = [getValueAtCurrentTime.bind(this)]; this.data = data; this.keyframes = data.k; this.keyframesMetadata = []; this.offsetTime = elem.data.st; this.k = true; this.kf = true; this._isFirstFrame = true; this.mult = mult || 1; this.elem = elem; this.container = container; this.comp = elem.comp; this.getValue = processEffectsSequence; this.setVValue = setVValue; this.interpolateValue = interpolateValue; this.frameId = -1; var arrLen = data.k[0].s.length; this.v = createTypedArray('float32', arrLen); this.pv = createTypedArray('float32', arrLen); for (i = 0; i < arrLen; i += 1) { this.v[i] = initFrame; this.pv[i] = initFrame; } this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray('float32', arrLen) }; this.addEffect = addEffect; } var PropertyFactory = function () { function getProp(elem, data, type, mult, container) { if (data.sid) { data = elem.globalData.slotManager.getProp(data); } var p; if (!data.k.length) { p = new ValueProperty(elem, data, mult, container); } else if (typeof data.k[0] === 'number') { p = new MultiDimensionalProperty(elem, data, mult, container); } else { switch (type) { case 0: p = new KeyframedValueProperty(elem, data, mult, container); break; case 1: p = new KeyframedMultidimensionalProperty(elem, data, mult, container); break; default: break; } } if (p.effectsSequence.length) { container.addDynamicProperty(p); } return p; } var ob = { getProp: getProp }; return ob; }(); function DynamicPropertyContainer() {} DynamicPropertyContainer.prototype = { addDynamicProperty: function addDynamicProperty(prop) { if (this.dynamicProperties.indexOf(prop) === -1) { this.dynamicProperties.push(prop); this.container.addDynamicProperty(this); this._isAnimated = true; } }, iterateDynamicProperties: function iterateDynamicProperties() { this._mdf = false; var i; var len = this.dynamicProperties.length; for (i = 0; i < len; i += 1) { this.dynamicProperties[i].getValue(); if (this.dynamicProperties[i]._mdf) { this._mdf = true; } } }, initDynamicPropertyContainer: function initDynamicPropertyContainer(container) { this.container = container; this.dynamicProperties = []; this._mdf = false; this._isAnimated = false; } }; var pointPool = function () { function create() { return createTypedArray('float32', 2); } return poolFactory(8, create); }(); function ShapePath() { this.c = false; this._length = 0; this._maxLength = 8; this.v = createSizedArray(this._maxLength); this.o = createSizedArray(this._maxLength); this.i = createSizedArray(this._maxLength); } ShapePath.prototype.setPathData = function (closed, len) { this.c = closed; this.setLength(len); var i = 0; while (i < len) { this.v[i] = pointPool.newElement(); this.o[i] = pointPool.newElement(); this.i[i] = pointPool.newElement(); i += 1; } }; ShapePath.prototype.setLength = function (len) { while (this._maxLength < len) { this.doubleArrayLength(); } this._length = len; }; ShapePath.prototype.doubleArrayLength = function () { this.v = this.v.concat(createSizedArray(this._maxLength)); this.i = this.i.concat(createSizedArray(this._maxLength)); this.o = this.o.concat(createSizedArray(this._maxLength)); this._maxLength *= 2; }; ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) { var arr; this._length = Math.max(this._length, pos + 1); if (this._length >= this._maxLength) { this.doubleArrayLength(); } switch (type) { case 'v': arr = this.v; break; case 'i': arr = this.i; break; case 'o': arr = this.o; break; default: arr = []; break; } if (!arr[pos] || arr[pos] && !replace) { arr[pos] = pointPool.newElement(); } arr[pos][0] = x; arr[pos][1] = y; }; ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) { this.setXYAt(vX, vY, 'v', pos, replace); this.setXYAt(oX, oY, 'o', pos, replace); this.setXYAt(iX, iY, 'i', pos, replace); }; ShapePath.prototype.reverse = function () { var newPath = new ShapePath(); newPath.setPathData(this.c, this._length); var vertices = this.v; var outPoints = this.o; var inPoints = this.i; var init = 0; if (this.c) { newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false); init = 1; } var cnt = this._length - 1; var len = this._length; var i; for (i = init; i < len; i += 1) { newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false); cnt -= 1; } return newPath; }; ShapePath.prototype.length = function () { return this._length; }; var shapePool = function () { function create() { return new ShapePath(); } function release(shapePath) { var len = shapePath._length; var i; for (i = 0; i < len; i += 1) { pointPool.release(shapePath.v[i]); pointPool.release(shapePath.i[i]); pointPool.release(shapePath.o[i]); shapePath.v[i] = null; shapePath.i[i] = null; shapePath.o[i] = null; } shapePath._length = 0; shapePath.c = false; } function clone(shape) { var cloned = factory.newElement(); var i; var len = shape._length === undefined ? shape.v.length : shape._length; cloned.setLength(len); cloned.c = shape.c; for (i = 0; i < len; i += 1) { 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); } return cloned; } var factory = poolFactory(4, create, release); factory.clone = clone; return factory; }(); function ShapeCollection() { this._length = 0; this._maxLength = 4; this.shapes = createSizedArray(this._maxLength); } ShapeCollection.prototype.addShape = function (shapeData) { if (this._length === this._maxLength) { this.shapes = this.shapes.concat(createSizedArray(this._maxLength)); this._maxLength *= 2; } this.shapes[this._length] = shapeData; this._length += 1; }; ShapeCollection.prototype.releaseShapes = function () { var i; for (i = 0; i < this._length; i += 1) { shapePool.release(this.shapes[i]); } this._length = 0; }; var shapeCollectionPool = function () { var ob = { newShapeCollection: newShapeCollection, release: release }; var _length = 0; var _maxLength = 4; var pool = createSizedArray(_maxLength); function newShapeCollection() { var shapeCollection; if (_length) { _length -= 1; shapeCollection = pool[_length]; } else { shapeCollection = new ShapeCollection(); } return shapeCollection; } function release(shapeCollection) { var i; var len = shapeCollection._length; for (i = 0; i < len; i += 1) { shapePool.release(shapeCollection.shapes[i]); } shapeCollection._length = 0; if (_length === _maxLength) { pool = pooling["double"](pool); _maxLength *= 2; } pool[_length] = shapeCollection; _length += 1; } return ob; }(); var ShapePropertyFactory = function () { var initFrame = -999999; function interpolateShape(frameNum, previousValue, caching) { var iterationIndex = caching.lastIndex; var keyPropS; var keyPropE; var isHold; var j; var k; var jLen; var kLen; var perc; var vertexValue; var kf = this.keyframes; if (frameNum < kf[0].t - this.offsetTime) { keyPropS = kf[0].s[0]; isHold = true; iterationIndex = 0; } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) { keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0]; /* if(kf[kf.length - 1].s){ keyPropS = kf[kf.length - 1].s[0]; }else{ keyPropS = kf[kf.length - 2].e[0]; } */ isHold = true; } else { var i = iterationIndex; var len = kf.length - 1; var flag = true; var keyData; var nextKeyData; var keyframeMetadata; while (flag) { keyData = kf[i]; nextKeyData = kf[i + 1]; if (nextKeyData.t - this.offsetTime > frameNum) { break; } if (i < len - 1) { i += 1; } else { flag = false; } } keyframeMetadata = this.keyframesMetadata[i] || {}; isHold = keyData.h === 1; iterationIndex = i; if (!isHold) { if (frameNum >= nextKeyData.t - this.offsetTime) { perc = 1; } else if (frameNum < keyData.t - this.offsetTime) { perc = 0; } else { var fnc; if (keyframeMetadata.__fnct) { fnc = keyframeMetadata.__fnct; } else { fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get; keyframeMetadata.__fnct = fnc; } perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime))); } keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0]; } keyPropS = keyData.s[0]; } jLen = previousValue._length; kLen = keyPropS.i[0].length; caching.lastIndex = iterationIndex; for (j = 0; j < jLen; j += 1) { for (k = 0; k < kLen; k += 1) { vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc; previousValue.i[j][k] = vertexValue; vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc; previousValue.o[j][k] = vertexValue; vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc; previousValue.v[j][k] = vertexValue; } } } function interpolateShapeCurrentTime() { var frameNum = this.comp.renderedFrame - this.offsetTime; var initTime = this.keyframes[0].t - this.offsetTime; var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; var lastFrame = this._caching.lastFrame; if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) { /// / this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0; this.interpolateShape(frameNum, this.pv, this._caching); /// / } this._caching.lastFrame = frameNum; return this.pv; } function resetShape() { this.paths = this.localShapeCollection; } function shapesEqual(shape1, shape2) { if (shape1._length !== shape2._length || shape1.c !== shape2.c) { return false; } var i; var len = shape1._length; for (i = 0; i < len; i += 1) { 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]) { return false; } } return true; } function setVValue(newPath) { if (!shapesEqual(this.v, newPath)) { this.v = shapePool.clone(newPath); this.localShapeCollection.releaseShapes(); this.localShapeCollection.addShape(this.v); this._mdf = true; this.paths = this.localShapeCollection; } } function processEffectsSequence() { if (this.elem.globalData.frameId === this.frameId) { return; } if (!this.effectsSequence.length) { this._mdf = false; return; } if (this.lock) { this.setVValue(this.pv); return; } this.lock = true; this._mdf = false; var finalValue; if (this.kf) { finalValue = this.pv; } else if (this.data.ks) { finalValue = this.data.ks.k; } else { finalValue = this.data.pt.k; } var i; var len = this.effectsSequence.length; for (i = 0; i < len; i += 1) { finalValue = this.effectsSequence[i](finalValue); } this.setVValue(finalValue); this.lock = false; this.frameId = this.elem.globalData.frameId; } function ShapeProperty(elem, data, type) { this.propType = 'shape'; this.comp = elem.comp; this.container = elem; this.elem = elem; this.data = data; this.k = false; this.kf = false; this._mdf = false; var pathData = type === 3 ? data.pt.k : data.ks.k; this.v = shapePool.clone(pathData); this.pv = shapePool.clone(this.v); this.localShapeCollection = shapeCollectionPool.newShapeCollection(); this.paths = this.localShapeCollection; this.paths.addShape(this.v); this.reset = resetShape; this.effectsSequence = []; } function addEffect(effectFunction) { this.effectsSequence.push(effectFunction); this.container.addDynamicProperty(this); } ShapeProperty.prototype.interpolateShape = interpolateShape; ShapeProperty.prototype.getValue = processEffectsSequence; ShapeProperty.prototype.setVValue = setVValue; ShapeProperty.prototype.addEffect = addEffect; function KeyframedShapeProperty(elem, data, type) { this.propType = 'shape'; this.comp = elem.comp; this.elem = elem; this.container = elem; this.offsetTime = elem.data.st; this.keyframes = type === 3 ? data.pt.k : data.ks.k; this.keyframesMetadata = []; this.k = true; this.kf = true; var len = this.keyframes[0].s[0].i.length; this.v = shapePool.newElement(); this.v.setPathData(this.keyframes[0].s[0].c, len); this.pv = shapePool.clone(this.v); this.localShapeCollection = shapeCollectionPool.newShapeCollection(); this.paths = this.localShapeCollection; this.paths.addShape(this.v); this.lastFrame = initFrame; this.reset = resetShape; this._caching = { lastFrame: initFrame, lastIndex: 0 }; this.effectsSequence = [interpolateShapeCurrentTime.bind(this)]; } KeyframedShapeProperty.prototype.getValue = processEffectsSequence; KeyframedShapeProperty.prototype.interpolateShape = interpolateShape; KeyframedShapeProperty.prototype.setVValue = setVValue; KeyframedShapeProperty.prototype.addEffect = addEffect; var EllShapeProperty = function () { var cPoint = roundCorner; function EllShapePropertyFactory(elem, data) { this.v = shapePool.newElement(); this.v.setPathData(true, 4); this.localShapeCollection = shapeCollectionPool.newShapeCollection(); this.paths = this.localShapeCollection; this.localShapeCollection.addShape(this.v); this.d = data.d; this.elem = elem; this.comp = elem.comp; this.frameId = -1; this.initDynamicPropertyContainer(elem); this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this); if (this.dynamicProperties.length) { this.k = true; } else { this.k = false; this.convertEllToPath(); } } EllShapePropertyFactory.prototype = { reset: resetShape, getValue: function getValue() { if (this.elem.globalData.frameId === this.frameId) { return; } this.frameId = this.elem.globalData.frameId; this.iterateDynamicProperties(); if (this._mdf) { this.convertEllToPath(); } }, convertEllToPath: function convertEllToPath() { var p0 = this.p.v[0]; var p1 = this.p.v[1]; var s0 = this.s.v[0] / 2; var s1 = this.s.v[1] / 2; var _cw = this.d !== 3; var _v = this.v; _v.v[0][0] = p0; _v.v[0][1] = p1 - s1; _v.v[1][0] = _cw ? p0 + s0 : p0 - s0; _v.v[1][1] = p1; _v.v[2][0] = p0; _v.v[2][1] = p1 + s1; _v.v[3][0] = _cw ? p0 - s0 : p0 + s0; _v.v[3][1] = p1; _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; _v.i[0][1] = p1 - s1; _v.i[1][0] = _cw ? p0 + s0 : p0 - s0; _v.i[1][1] = p1 - s1 * cPoint; _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; _v.i[2][1] = p1 + s1; _v.i[3][0] = _cw ? p0 - s0 : p0 + s0; _v.i[3][1] = p1 + s1 * cPoint; _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; _v.o[0][1] = p1 - s1; _v.o[1][0] = _cw ? p0 + s0 : p0 - s0; _v.o[1][1] = p1 + s1 * cPoint; _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; _v.o[2][1] = p1 + s1; _v.o[3][0] = _cw ? p0 - s0 : p0 + s0; _v.o[3][1] = p1 - s1 * cPoint; } }; extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory); return EllShapePropertyFactory; }(); var StarShapeProperty = function () { function StarShapePropertyFactory(elem, data) { this.v = shapePool.newElement(); this.v.setPathData(true, 0); this.elem = elem; this.comp = elem.comp; this.data = data; this.frameId = -1; this.d = data.d; this.initDynamicPropertyContainer(elem); if (data.sy === 1) { this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this); this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this); this.convertToPath = this.convertStarToPath; } else { this.convertToPath = this.convertPolygonToPath; } this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this); this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this); this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this); this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this); this.localShapeCollection = shapeCollectionPool.newShapeCollection(); this.localShapeCollection.addShape(this.v); this.paths = this.localShapeCollection; if (this.dynamicProperties.length) { this.k = true; } else { this.k = false; this.convertToPath(); } } StarShapePropertyFactory.prototype = { reset: resetShape, getValue: function getValue() { if (this.elem.globalData.frameId === this.frameId) { return; } this.frameId = this.elem.globalData.frameId; this.iterateDynamicProperties(); if (this._mdf) { this.convertToPath(); } }, convertStarToPath: function convertStarToPath() { var numPts = Math.floor(this.pt.v) * 2; var angle = Math.PI * 2 / numPts; /* this.v.v.length = numPts; this.v.i.length = numPts; this.v.o.length = numPts; */ var longFlag = true; var longRad = this.or.v; var shortRad = this.ir.v; var longRound = this.os.v; var shortRound = this.is.v; var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2); var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2); var i; var rad; var roundness; var perimSegment; var currentAng = -Math.PI / 2; currentAng += this.r.v; var dir = this.data.d === 3 ? -1 : 1; this.v._length = 0; for (i = 0; i < numPts; i += 1) { rad = longFlag ? longRad : shortRad; roundness = longFlag ? longRound : shortRound; perimSegment = longFlag ? longPerimSegment : shortPerimSegment; var x = rad * Math.cos(currentAng); var y = rad * Math.sin(currentAng); var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y); var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y); x += +this.p.v[0]; y += +this.p.v[1]; 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); /* this.v.v[i] = [x,y]; this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir]; this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir]; this.v._length = numPts; */ longFlag = !longFlag; currentAng += angle * dir; } }, convertPolygonToPath: function convertPolygonToPath() { var numPts = Math.floor(this.pt.v); var angle = Math.PI * 2 / numPts; var rad = this.or.v; var roundness = this.os.v; var perimSegment = 2 * Math.PI * rad / (numPts * 4); var i; var currentAng = -Math.PI * 0.5; var dir = this.data.d === 3 ? -1 : 1; currentAng += this.r.v; this.v._length = 0; for (i = 0; i < numPts; i += 1) { var x = rad * Math.cos(currentAng); var y = rad * Math.sin(currentAng); var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y); var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y); x += +this.p.v[0]; y += +this.p.v[1]; 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); currentAng += angle * dir; } this.paths.length = 0; this.paths[0] = this.v; } }; extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory); return StarShapePropertyFactory; }(); var RectShapeProperty = function () { function RectShapePropertyFactory(elem, data) { this.v = shapePool.newElement(); this.v.c = true; this.localShapeCollection = shapeCollectionPool.newShapeCollection(); this.localShapeCollection.addShape(this.v); this.paths = this.localShapeCollection; this.elem = elem; this.comp = elem.comp; this.frameId = -1; this.d = data.d; this.initDynamicPropertyContainer(elem); this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this); this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this); if (this.dynamicProperties.length) { this.k = true; } else { this.k = false; this.convertRectToPath(); } } RectShapePropertyFactory.prototype = { convertRectToPath: function convertRectToPath() { var p0 = this.p.v[0]; var p1 = this.p.v[1]; var v0 = this.s.v[0] / 2; var v1 = this.s.v[1] / 2; var round = bmMin(v0, v1, this.r.v); var cPoint = round * (1 - roundCorner); this.v._length = 0; if (this.d === 2 || this.d === 1) { this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true); this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true); if (round !== 0) { this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true); this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true); this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true); this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true); this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true); this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true); } else { this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2); this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3); } } else { this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true); if (round !== 0) { this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true); this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true); this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true); this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true); this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true); this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true); this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true); } else { this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true); this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true); this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true); } } }, getValue: function getValue() { if (this.elem.globalData.frameId === this.frameId) { return; } this.frameId = this.elem.globalData.frameId; this.iterateDynamicProperties(); if (this._mdf) { this.convertRectToPath(); } }, reset: resetShape }; extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory); return RectShapePropertyFactory; }(); function getShapeProp(elem, data, type) { var prop; if (type === 3 || type === 4) { var dataProp = type === 3 ? data.pt : data.ks; var keys = dataProp.k; if (keys.length) { prop = new KeyframedShapeProperty(elem, data, type); } else { prop = new ShapeProperty(elem, data, type); } } else if (type === 5) { prop = new RectShapeProperty(elem, data); } else if (type === 6) { prop = new EllShapeProperty(elem, data); } else if (type === 7) { prop = new StarShapeProperty(elem, data); } if (prop.k) { elem.addDynamicProperty(prop); } return prop; } function getConstructorFunction() { return ShapeProperty; } function getKeyframedConstructorFunction() { return KeyframedShapeProperty; } var ob = {}; ob.getShapeProp = getShapeProp; ob.getConstructorFunction = getConstructorFunction; ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction; return ob; }(); /*! Transformation Matrix v2.0 (c) Epistemex 2014-2015 www.epistemex.com By Ken Fyrstenberg Contributions by leeoniya. License: MIT, header required. */ /** * 2D transformation matrix object initialized with identity matrix. * * The matrix can synchronize a canvas context by supplying the context * as an argument, or later apply current absolute transform to an * existing context. * * All values are handled as floating point values. * * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix * @prop {number} a - scale x * @prop {number} b - shear y * @prop {number} c - shear x * @prop {number} d - scale y * @prop {number} e - translate x * @prop {number} f - translate y * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context * @constructor */ var Matrix = function () { var _cos = Math.cos; var _sin = Math.sin; var _tan = Math.tan; var _rnd = Math.round; function reset() { 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; return this; } function rotate(angle) { if (angle === 0) { return this; } var mCos = _cos(angle); var mSin = _sin(angle); return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } function rotateX(angle) { if (angle === 0) { return this; } var mCos = _cos(angle); var mSin = _sin(angle); return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1); } function rotateY(angle) { if (angle === 0) { return this; } var mCos = _cos(angle); var mSin = _sin(angle); return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1); } function rotateZ(angle) { if (angle === 0) { return this; } var mCos = _cos(angle); var mSin = _sin(angle); return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } function shear(sx, sy) { return this._t(1, sy, sx, 1, 0, 0); } function skew(ax, ay) { return this.shear(_tan(ax), _tan(ay)); } function skewFromAxis(ax, angle) { var mCos = _cos(angle); var mSin = _sin(angle); 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); } function scale(sx, sy, sz) { if (!sz && sz !== 0) { sz = 1; } if (sx === 1 && sy === 1 && sz === 1) { return this; } return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1); } function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) { this.props[0] = a; this.props[1] = b; this.props[2] = c; this.props[3] = d; this.props[4] = e; this.props[5] = f; this.props[6] = g; this.props[7] = h; this.props[8] = i; this.props[9] = j; this.props[10] = k; this.props[11] = l; this.props[12] = m; this.props[13] = n; this.props[14] = o; this.props[15] = p; return this; } function translate(tx, ty, tz) { tz = tz || 0; if (tx !== 0 || ty !== 0 || tz !== 0) { return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1); } return this; } function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) { var _p = this.props; 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) { // NOTE: commenting this condition because TurboFan deoptimizes code when present // if(m2 !== 0 || n2 !== 0 || o2 !== 0){ _p[12] = _p[12] * a2 + _p[15] * m2; _p[13] = _p[13] * f2 + _p[15] * n2; _p[14] = _p[14] * k2 + _p[15] * o2; _p[15] *= p2; // } this._identityCalculated = false; return this; } var a1 = _p[0]; var b1 = _p[1]; var c1 = _p[2]; var d1 = _p[3]; var e1 = _p[4]; var f1 = _p[5]; var g1 = _p[6]; var h1 = _p[7]; var i1 = _p[8]; var j1 = _p[9]; var k1 = _p[10]; var l1 = _p[11]; var m1 = _p[12]; var n1 = _p[13]; var o1 = _p[14]; var p1 = _p[15]; /* matrix order (canvas compatible): * ace * bdf * 001 */ _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2; _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2; _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2; _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2; _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2; _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2; _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2; _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2; _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2; _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2; _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2; _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2; _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2; _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2; _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2; _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2; this._identityCalculated = false; return this; } function multiply(matrix) { var matrixProps = matrix.props; return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]); } function isIdentity() { if (!this._identityCalculated) { 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); this._identityCalculated = true; } return this._identity; } function equals(matr) { var i = 0; while (i < 16) { if (matr.props[i] !== this.props[i]) { return false; } i += 1; } return true; } function clone(matr) { var i; for (i = 0; i < 16; i += 1) { matr.props[i] = this.props[i]; } return matr; } function cloneFromProps(props) { var i; for (i = 0; i < 16; i += 1) { this.props[i] = props[i]; } } function applyToPoint(x, y, z) { return { x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14] }; /* return { x: x * me.a + y * me.c + me.e, y: x * me.b + y * me.d + me.f }; */ } function applyToX(x, y, z) { return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12]; } function applyToY(x, y, z) { return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13]; } function applyToZ(x, y, z) { return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]; } function getInverseMatrix() { var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4]; var a = this.props[5] / determinant; var b = -this.props[1] / determinant; var c = -this.props[4] / determinant; var d = this.props[0] / determinant; var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant; var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant; var inverseMatrix = new Matrix(); inverseMatrix.props[0] = a; inverseMatrix.props[1] = b; inverseMatrix.props[4] = c; inverseMatrix.props[5] = d; inverseMatrix.props[12] = e; inverseMatrix.props[13] = f; return inverseMatrix; } function inversePoint(pt) { var inverseMatrix = this.getInverseMatrix(); return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0); } function inversePoints(pts) { var i; var len = pts.length; var retPts = []; for (i = 0; i < len; i += 1) { retPts[i] = inversePoint(pts[i]); } return retPts; } function applyToTriplePoints(pt1, pt2, pt3) { var arr = createTypedArray('float32', 6); if (this.isIdentity()) { arr[0] = pt1[0]; arr[1] = pt1[1]; arr[2] = pt2[0]; arr[3] = pt2[1]; arr[4] = pt3[0]; arr[5] = pt3[1]; } else { var p0 = this.props[0]; var p1 = this.props[1]; var p4 = this.props[4]; var p5 = this.props[5]; var p12 = this.props[12]; var p13 = this.props[13]; arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12; arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13; arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12; arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13; arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12; arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13; } return arr; } function applyToPointArray(x, y, z) { var arr; if (this.isIdentity()) { arr = [x, y, z]; } else { 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]]; } return arr; } function applyToPointStringified(x, y) { if (this.isIdentity()) { return x + ',' + y; } var _p = this.props; 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; } function toCSS() { // 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. /* if(this.isIdentity()) { return ''; } */ var i = 0; var props = this.props; var cssValue = 'matrix3d('; var v = 10000; while (i < 16) { cssValue += _rnd(props[i] * v) / v; cssValue += i === 15 ? ')' : ','; i += 1; } return cssValue; } function roundMatrixProperty(val) { var v = 10000; if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) { return _rnd(val * v) / v; } return val; } function to2dCSS() { // 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. /* if(this.isIdentity()) { return ''; } */ var props = this.props; var _a = roundMatrixProperty(props[0]); var _b = roundMatrixProperty(props[1]); var _c = roundMatrixProperty(props[4]); var _d = roundMatrixProperty(props[5]); var _e = roundMatrixProperty(props[12]); var _f = roundMatrixProperty(props[13]); return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')'; } return function () { this.reset = reset; this.rotate = rotate; this.rotateX = rotateX; this.rotateY = rotateY; this.rotateZ = rotateZ; this.skew = skew; this.skewFromAxis = skewFromAxis; this.shear = shear; this.scale = scale; this.setTransform = setTransform; this.translate = translate; this.transform = transform; this.multiply = multiply; this.applyToPoint = applyToPoint; this.applyToX = applyToX; this.applyToY = applyToY; this.applyToZ = applyToZ; this.applyToPointArray = applyToPointArray; this.applyToTriplePoints = applyToTriplePoints; this.applyToPointStringified = applyToPointStringified; this.toCSS = toCSS; this.to2dCSS = to2dCSS; this.clone = clone; this.cloneFromProps = cloneFromProps; this.equals = equals; this.inversePoints = inversePoints; this.inversePoint = inversePoint; this.getInverseMatrix = getInverseMatrix; this._t = this.transform; this.isIdentity = isIdentity; this._identity = true; this._identityCalculated = false; this.props = createTypedArray('float32', 16); this.reset(); }; }(); function _typeof$3(o) { "@babel/helpers - typeof"; return _typeof$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$3(o); } var lottie = {}; var standalone = '__[STANDALONE]__'; var animationData = '__[ANIMATIONDATA]__'; var renderer = ''; function setLocation(href) { setLocationHref(href); } function searchAnimations() { if (standalone === true) { animationManager.searchAnimations(animationData, standalone, renderer); } else { animationManager.searchAnimations(); } } function setSubframeRendering(flag) { setSubframeEnabled(flag); } function setPrefix(prefix) { setIdPrefix(prefix); } function loadAnimation(params) { if (standalone === true) { params.animationData = JSON.parse(animationData); } return animationManager.loadAnimation(params); } function setQuality(value) { if (typeof value === 'string') { switch (value) { case 'high': setDefaultCurveSegments(200); break; default: case 'medium': setDefaultCurveSegments(50); break; case 'low': setDefaultCurveSegments(10); break; } } else if (!isNaN(value) && value > 1) { setDefaultCurveSegments(value); } if (getDefaultCurveSegments() >= 50) { roundValues(false); } else { roundValues(true); } } function inBrowser() { return typeof navigator !== 'undefined'; } function installPlugin(type, plugin) { if (type === 'expressions') { setExpressionsPlugin(plugin); } } function getFactory(name) { switch (name) { case 'propertyFactory': return PropertyFactory; case 'shapePropertyFactory': return ShapePropertyFactory; case 'matrix': return Matrix; default: return null; } } lottie.play = animationManager.play; lottie.pause = animationManager.pause; lottie.setLocationHref = setLocation; lottie.togglePause = animationManager.togglePause; lottie.setSpeed = animationManager.setSpeed; lottie.setDirection = animationManager.setDirection; lottie.stop = animationManager.stop; lottie.searchAnimations = searchAnimations; lottie.registerAnimation = animationManager.registerAnimation; lottie.loadAnimation = loadAnimation; lottie.setSubframeRendering = setSubframeRendering; lottie.resize = animationManager.resize; // lottie.start = start; lottie.goToAndStop = animationManager.goToAndStop; lottie.destroy = animationManager.destroy; lottie.setQuality = setQuality; lottie.inBrowser = inBrowser; lottie.installPlugin = installPlugin; lottie.freeze = animationManager.freeze; lottie.unfreeze = animationManager.unfreeze; lottie.setVolume = animationManager.setVolume; lottie.mute = animationManager.mute; lottie.unmute = animationManager.unmute; lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations; lottie.useWebWorker = setWebWorker; lottie.setIDPrefix = setPrefix; lottie.__getFactory = getFactory; lottie.version = '5.13.0'; function checkReady() { if (document.readyState === 'complete') { clearInterval(readyStateCheckInterval); searchAnimations(); } } function getQueryVariable(variable) { var vars = queryString.split('&'); for (var i = 0; i < vars.length; i += 1) { var pair = vars[i].split('='); if (decodeURIComponent(pair[0]) == variable) { // eslint-disable-line eqeqeq return decodeURIComponent(pair[1]); } } return null; } var queryString = ''; if (standalone) { var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index] || { src: '' }; queryString = myScript.src ? myScript.src.replace(/^[^\?]+\??/, '') : ''; // eslint-disable-line no-useless-escape renderer = getQueryVariable('renderer'); } var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility try { if (!(( false ? 0 : _typeof$3(exports)) === 'object' && "object" !== 'undefined') && !( true && __webpack_require__.amdO) // eslint-disable-line no-undef ) // removed by dead control flow {} } catch (err) { // } var ShapeModifiers = function () { var ob = {}; var modifiers = {}; ob.registerModifier = registerModifier; ob.getModifier = getModifier; function registerModifier(nm, factory) { if (!modifiers[nm]) { modifiers[nm] = factory; } } function getModifier(nm, elem, data) { return new modifiers[nm](elem, data); } return ob; }(); function ShapeModifier() {} ShapeModifier.prototype.initModifierProperties = function () {}; ShapeModifier.prototype.addShapeToModifier = function () {}; ShapeModifier.prototype.addShape = function (data) { if (!this.closed) { // 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. data.sh.container.addDynamicProperty(data.sh); var shapeData = { shape: data.sh, data: data, localShapeCollection: shapeCollectionPool.newShapeCollection() }; this.shapes.push(shapeData); this.addShapeToModifier(shapeData); if (this._isAnimated) { data.setAsAnimated(); } } }; ShapeModifier.prototype.init = function (elem, data) { this.shapes = []; this.elem = elem; this.initDynamicPropertyContainer(elem); this.initModifierProperties(elem, data); this.frameId = initialDefaultFrame; this.closed = false; this.k = false; if (this.dynamicProperties.length) { this.k = true; } else { this.getValue(true); } }; ShapeModifier.prototype.processKeys = function () { if (this.elem.globalData.frameId === this.frameId) { return; } this.frameId = this.elem.globalData.frameId; this.iterateDynamicProperties(); }; extendPrototype([DynamicPropertyContainer], ShapeModifier); function TrimModifier() {} extendPrototype([ShapeModifier], TrimModifier); TrimModifier.prototype.initModifierProperties = function (elem, data) { this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this); this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this); this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this); this.sValue = 0; this.eValue = 0; this.getValue = this.processKeys; this.m = data.m; this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length; }; TrimModifier.prototype.addShapeToModifier = function (shapeData) { shapeData.pathsData = []; }; TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) { var segments = []; if (e <= 1) { segments.push({ s: s, e: e }); } else if (s >= 1) { segments.push({ s: s - 1, e: e - 1 }); } else { segments.push({ s: s, e: 1 }); segments.push({ s: 0, e: e - 1 }); } var shapeSegments = []; var i; var len = segments.length; var segmentOb; for (i = 0; i < len; i += 1) { segmentOb = segments[i]; if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) { var shapeS; var shapeE; if (segmentOb.s * totalModifierLength <= addedLength) { shapeS = 0; } else { shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength; } if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) { shapeE = 1; } else { shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength; } shapeSegments.push([shapeS, shapeE]); } } if (!shapeSegments.length) { shapeSegments.push([0, 0]); } return shapeSegments; }; TrimModifier.prototype.releasePathsData = function (pathsData) { var i; var len = pathsData.length; for (i = 0; i < len; i += 1) { segmentsLengthPool.release(pathsData[i]); } pathsData.length = 0; return pathsData; }; TrimModifier.prototype.processShapes = function (_isFirstFrame) { var s; var e; if (this._mdf || _isFirstFrame) { var o = this.o.v % 360 / 360; if (o < 0) { o += 1; } if (this.s.v > 1) { s = 1 + o; } else if (this.s.v < 0) { s = 0 + o; } else { s = this.s.v + o; } if (this.e.v > 1) { e = 1 + o; } else if (this.e.v < 0) { e = 0 + o; } else { e = this.e.v + o; } if (s > e) { var _s = s; s = e; e = _s; } s = Math.round(s * 10000) * 0.0001; e = Math.round(e * 10000) * 0.0001; this.sValue = s; this.eValue = e; } else { s = this.sValue; e = this.eValue; } var shapePaths; var i; var len = this.shapes.length; var j; var jLen; var pathsData; var pathData; var totalShapeLength; var totalModifierLength = 0; if (e === s) { for (i = 0; i < len; i += 1) { this.shapes[i].localShapeCollection.releaseShapes(); this.shapes[i].shape._mdf = true; this.shapes[i].shape.paths = this.shapes[i].localShapeCollection; if (this._mdf) { this.shapes[i].pathsData.length = 0; } } } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) { var segments = []; var shapeData; var localShapeCollection; for (i = 0; i < len; i += 1) { shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) { shapeData.shape.paths = shapeData.localShapeCollection; } else { shapePaths = shapeData.shape.paths; jLen = shapePaths._length; totalShapeLength = 0; if (!shapeData.shape._mdf && shapeData.pathsData.length) { totalShapeLength = shapeData.totalShapeLength; } else { pathsData = this.releasePathsData(shapeData.pathsData); for (j = 0; j < jLen; j += 1) { pathData = bez.getSegmentsLength(shapePaths.shapes[j]); pathsData.push(pathData); totalShapeLength += pathData.totalLength; } shapeData.totalShapeLength = totalShapeLength; shapeData.pathsData = pathsData; } totalModifierLength += totalShapeLength; shapeData.shape._mdf = true; } } var shapeS = s; var shapeE = e; var addedLength = 0; var edges; for (i = len - 1; i >= 0; i -= 1) { shapeData = this.shapes[i]; if (shapeData.shape._mdf) { localShapeCollection = shapeData.localShapeCollection; localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group if (this.m === 2 && len > 1) { edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength); addedLength += shapeData.totalShapeLength; } else { edges = [[shapeS, shapeE]]; } jLen = edges.length; for (j = 0; j < jLen; j += 1) { shapeS = edges[j][0]; shapeE = edges[j][1]; segments.length = 0; if (shapeE <= 1) { segments.push({ s: shapeData.totalShapeLength * shapeS, e: shapeData.totalShapeLength * shapeE }); } else if (shapeS >= 1) { segments.push({ s: shapeData.totalShapeLength * (shapeS - 1), e: shapeData.totalShapeLength * (shapeE - 1) }); } else { segments.push({ s: shapeData.totalShapeLength * shapeS, e: shapeData.totalShapeLength }); segments.push({ s: 0, e: shapeData.totalShapeLength * (shapeE - 1) }); } var newShapesData = this.addShapes(shapeData, segments[0]); if (segments[0].s !== segments[0].e) { if (segments.length > 1) { var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1]; if (lastShapeInCollection.c) { var lastShape = newShapesData.pop(); this.addPaths(newShapesData, localShapeCollection); newShapesData = this.addShapes(shapeData, segments[1], lastShape); } else { this.addPaths(newShapesData, localShapeCollection); newShapesData = this.addShapes(shapeData, segments[1]); } } this.addPaths(newShapesData, localShapeCollection); } } shapeData.shape.paths = localShapeCollection; } } } else if (this._mdf) { for (i = 0; i < len; i += 1) { // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween. // Don't remove this even if it's losing cached info. this.shapes[i].pathsData.length = 0; this.shapes[i].shape._mdf = true; } } }; TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) { var i; var len = newPaths.length; for (i = 0; i < len; i += 1) { localShapeCollection.addShape(newPaths[i]); } }; TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) { shapePath.setXYAt(pt2[0], pt2[1], 'o', pos); shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1); if (newShape) { shapePath.setXYAt(pt1[0], pt1[1], 'v', pos); } shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1); }; TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) { shapePath.setXYAt(points[1], points[5], 'o', pos); shapePath.setXYAt(points[2], points[6], 'i', pos + 1); if (newShape) { shapePath.setXYAt(points[0], points[4], 'v', pos); } shapePath.setXYAt(points[3], points[7], 'v', pos + 1); }; TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) { var pathsData = shapeData.pathsData; var shapePaths = shapeData.shape.paths.shapes; var i; var len = shapeData.shape.paths._length; var j; var jLen; var addedLength = 0; var currentLengthData; var segmentCount; var lengths; var segment; var shapes = []; var initPos; var newShape = true; if (!shapePath) { shapePath = shapePool.newElement(); segmentCount = 0; initPos = 0; } else { segmentCount = shapePath._length; initPos = shapePath._length; } shapes.push(shapePath); for (i = 0; i < len; i += 1) { lengths = pathsData[i].lengths; shapePath.c = shapePaths[i].c; jLen = shapePaths[i].c ? lengths.length : lengths.length + 1; for (j = 1; j < jLen; j += 1) { currentLengthData = lengths[j - 1]; if (addedLength + currentLengthData.addedLength < shapeSegment.s) { addedLength += currentLengthData.addedLength; shapePath.c = false; } else if (addedLength > shapeSegment.e) { shapePath.c = false; break; } else { if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) { this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape); newShape = false; } else { 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]); this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape); newShape = false; shapePath.c = false; } addedLength += currentLengthData.addedLength; segmentCount += 1; } } if (shapePaths[i].c && lengths.length) { currentLengthData = lengths[j - 1]; if (addedLength <= shapeSegment.e) { var segmentLength = lengths[j - 1].addedLength; if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) { this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape); newShape = false; } else { 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]); this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape); newShape = false; shapePath.c = false; } } else { shapePath.c = false; } addedLength += currentLengthData.addedLength; segmentCount += 1; } if (shapePath._length) { shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos); shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1); } if (addedLength > shapeSegment.e) { break; } if (i < len - 1) { shapePath = shapePool.newElement(); newShape = true; shapes.push(shapePath); segmentCount = 0; } } return shapes; }; function PuckerAndBloatModifier() {} extendPrototype([ShapeModifier], PuckerAndBloatModifier); PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) { this.getValue = this.processKeys; this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this); this._isAnimated = !!this.amount.effectsSequence.length; }; PuckerAndBloatModifier.prototype.processPath = function (path, amount) { var percent = amount / 100; var centerPoint = [0, 0]; var pathLength = path._length; var i = 0; for (i = 0; i < pathLength; i += 1) { centerPoint[0] += path.v[i][0]; centerPoint[1] += path.v[i][1]; } centerPoint[0] /= pathLength; centerPoint[1] /= pathLength; var clonedPath = shapePool.newElement(); clonedPath.c = path.c; var vX; var vY; var oX; var oY; var iX; var iY; for (i = 0; i < pathLength; i += 1) { vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent; vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent; oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent; oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent; iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent; iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent; clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i); } return clonedPath; }; PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) { var shapePaths; var i; var len = this.shapes.length; var j; var jLen; var amount = this.amount.v; if (amount !== 0) { var shapeData; var localShapeCollection; for (i = 0; i < len; i += 1) { shapeData = this.shapes[i]; localShapeCollection = shapeData.localShapeCollection; if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { localShapeCollection.releaseShapes(); shapeData.shape._mdf = true; shapePaths = shapeData.shape.paths.shapes; jLen = shapeData.shape.paths._length; for (j = 0; j < jLen; j += 1) { localShapeCollection.addShape(this.processPath(shapePaths[j], amount)); } } shapeData.shape.paths = shapeData.localShapeCollection; } } if (!this.dynamicProperties.length) { this._mdf = false; } }; var TransformPropertyFactory = function () { var defaultVector = [0, 0]; function applyToMatrix(mat) { var _mdf = this._mdf; this.iterateDynamicProperties(); this._mdf = this._mdf || _mdf; if (this.a) { mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); } if (this.s) { mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]); } if (this.sk) { mat.skewFromAxis(-this.sk.v, this.sa.v); } if (this.r) { mat.rotate(-this.r.v); } else { 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]); } if (this.data.p.s) { if (this.data.p.z) { mat.translate(this.px.v, this.py.v, -this.pz.v); } else { mat.translate(this.px.v, this.py.v, 0); } } else { mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); } } function processKeys(forceRender) { if (this.elem.globalData.frameId === this.frameId) { return; } if (this._isDirty) { this.precalculateMatrix(); this._isDirty = false; } this.iterateDynamicProperties(); if (this._mdf || forceRender) { var frameRate; this.v.cloneFromProps(this.pre.props); if (this.appliedTransformations < 1) { this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); } if (this.appliedTransformations < 2) { this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]); } if (this.sk && this.appliedTransformations < 3) { this.v.skewFromAxis(-this.sk.v, this.sa.v); } if (this.r && this.appliedTransformations < 4) { this.v.rotate(-this.r.v); } else if (!this.r && this.appliedTransformations < 4) { 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]); } if (this.autoOriented) { var v1; var v2; frameRate = this.elem.globalData.frameRate; if (this.p && this.p.keyframes && this.p.getValueAtTime) { if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) { v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0); v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0); } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) { v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0); v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0); } else { v1 = this.p.pv; v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime); } } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) { v1 = []; v2 = []; var px = this.px; var py = this.py; if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) { v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0); v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0); v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0); v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0); } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) { v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0); v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0); v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0); v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0); } else { v1 = [px.pv, py.pv]; v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime); v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime); } } else { v2 = defaultVector; v1 = v2; } this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0])); } if (this.data.p && this.data.p.s) { if (this.data.p.z) { this.v.translate(this.px.v, this.py.v, -this.pz.v); } else { this.v.translate(this.px.v, this.py.v, 0); } } else { this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); } } this.frameId = this.elem.globalData.frameId; } function precalculateMatrix() { this.appliedTransformations = 0; this.pre.reset(); if (!this.a.effectsSequence.length) { this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); this.appliedTransformations = 1; } else { return; } if (!this.s.effectsSequence.length) { this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]); this.appliedTransformations = 2; } else { return; } if (this.sk) { if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) { this.pre.skewFromAxis(-this.sk.v, this.sa.v); this.appliedTransformations = 3; } else { return; } } if (this.r) { if (!this.r.effectsSequence.length) { this.pre.rotate(-this.r.v); this.appliedTransformations = 4; } } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) { 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]); this.appliedTransformations = 4; } } function autoOrient() { // // var prevP = this.getValueAtTime(); } function addDynamicProperty(prop) { this._addDynamicProperty(prop); this.elem.addDynamicProperty(prop); this._isDirty = true; } function TransformProperty(elem, data, container) { this.elem = elem; this.frameId = -1; this.propType = 'transform'; this.data = data; this.v = new Matrix(); // Precalculated matrix with non animated properties this.pre = new Matrix(); this.appliedTransformations = 0; this.initDynamicPropertyContainer(container || elem); if (data.p && data.p.s) { this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this); this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this); if (data.p.z) { this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this); } } else { this.p = PropertyFactory.getProp(elem, data.p || { k: [0, 0, 0] }, 1, 0, this); } if (data.rx) { this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this); this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this); this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this); if (data.or.k[0].ti) { var i; var len = data.or.k.length; for (i = 0; i < len; i += 1) { data.or.k[i].to = null; data.or.k[i].ti = null; } } this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180 this.or.sh = true; } else { this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this); } if (data.sk) { this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this); this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this); } this.a = PropertyFactory.getProp(elem, data.a || { k: [0, 0, 0] }, 1, 0, this); this.s = PropertyFactory.getProp(elem, data.s || { k: [100, 100, 100] }, 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. if (data.o) { this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem); } else { this.o = { _mdf: false, v: 1 }; } this._isDirty = true; if (!this.dynamicProperties.length) { this.getValue(true); } } TransformProperty.prototype = { applyToMatrix: applyToMatrix, getValue: processKeys, precalculateMatrix: precalculateMatrix, autoOrient: autoOrient }; extendPrototype([DynamicPropertyContainer], TransformProperty); TransformProperty.prototype.addDynamicProperty = addDynamicProperty; TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty; function getTransformProperty(elem, data, container) { return new TransformProperty(elem, data, container); } return { getTransformProperty: getTransformProperty }; }(); function RepeaterModifier() {} extendPrototype([ShapeModifier], RepeaterModifier); RepeaterModifier.prototype.initModifierProperties = function (elem, data) { this.getValue = this.processKeys; this.c = PropertyFactory.getProp(elem, data.c, 0, null, this); this.o = PropertyFactory.getProp(elem, data.o, 0, null, this); this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this); this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this); this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this); this.data = data; if (!this.dynamicProperties.length) { this.getValue(true); } this._isAnimated = !!this.dynamicProperties.length; this.pMatrix = new Matrix(); this.rMatrix = new Matrix(); this.sMatrix = new Matrix(); this.tMatrix = new Matrix(); this.matrix = new Matrix(); }; RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) { var dir = inv ? -1 : 1; var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc); var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc); pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]); rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]); rMatrix.rotate(-transform.r.v * dir * perc); rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]); sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]); sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY); sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]); }; RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) { this.elem = elem; this.arr = arr; this.pos = pos; this.elemsData = elemsData; this._currentCopies = 0; this._elements = []; this._groups = []; this.frameId = -1; this.initDynamicPropertyContainer(elem); this.initModifierProperties(elem, arr[pos]); while (pos > 0) { pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]); this._elements.unshift(arr[pos]); } if (this.dynamicProperties.length) { this.k = true; } else { this.getValue(true); } }; RepeaterModifier.prototype.resetElements = function (elements) { var i; var len = elements.length; for (i = 0; i < len; i += 1) { elements[i]._processed = false; if (elements[i].ty === 'gr') { this.resetElements(elements[i].it); } } }; RepeaterModifier.prototype.cloneElements = function (elements) { var newElements = JSON.parse(JSON.stringify(elements)); this.resetElements(newElements); return newElements; }; RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) { var i; var len = elements.length; for (i = 0; i < len; i += 1) { elements[i]._render = renderFlag; if (elements[i].ty === 'gr') { this.changeGroupRender(elements[i].it, renderFlag); } } }; RepeaterModifier.prototype.processShapes = function (_isFirstFrame) { var items; var itemsTransform; var i; var dir; var cont; var hasReloaded = false; if (this._mdf || _isFirstFrame) { var copies = Math.ceil(this.c.v); if (this._groups.length < copies) { while (this._groups.length < copies) { var group = { it: this.cloneElements(this._elements), ty: 'gr' }; group.it.push({ a: { a: 0, ix: 1, k: [0, 0] }, nm: 'Transform', o: { a: 0, ix: 7, k: 100 }, p: { a: 0, ix: 2, k: [0, 0] }, r: { a: 1, ix: 6, k: [{ s: 0, e: 0, t: 0 }, { s: 0, e: 0, t: 1 }] }, s: { a: 0, ix: 3, k: [100, 100] }, sa: { a: 0, ix: 5, k: 0 }, sk: { a: 0, ix: 4, k: 0 }, ty: 'tr' }); this.arr.splice(0, 0, group); this._groups.splice(0, 0, group); this._currentCopies += 1; } this.elem.reloadShapes(); hasReloaded = true; } cont = 0; var renderFlag; for (i = 0; i <= this._groups.length - 1; i += 1) { renderFlag = cont < copies; this._groups[i]._render = renderFlag; this.changeGroupRender(this._groups[i].it, renderFlag); if (!renderFlag) { var elems = this.elemsData[i].it; var transformData = elems[elems.length - 1]; if (transformData.transform.op.v !== 0) { transformData.transform.op._mdf = true; transformData.transform.op.v = 0; } else { transformData.transform.op._mdf = false; } } cont += 1; } this._currentCopies = copies; /// / var offset = this.o.v; var offsetModulo = offset % 1; var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset); var pProps = this.pMatrix.props; var rProps = this.rMatrix.props; var sProps = this.sMatrix.props; this.pMatrix.reset(); this.rMatrix.reset(); this.sMatrix.reset(); this.tMatrix.reset(); this.matrix.reset(); var iteration = 0; if (offset > 0) { while (iteration < roundOffset) { this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); iteration += 1; } if (offsetModulo) { this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false); iteration += offsetModulo; } } else if (offset < 0) { while (iteration > roundOffset) { this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true); iteration -= 1; } if (offsetModulo) { this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true); iteration -= offsetModulo; } } i = this.data.m === 1 ? 0 : this._currentCopies - 1; dir = this.data.m === 1 ? 1 : -1; cont = this._currentCopies; var j; var jLen; while (cont) { items = this.elemsData[i].it; itemsTransform = items[items.length - 1].transform.mProps.v.props; jLen = itemsTransform.length; items[items.length - 1].transform.mProps._mdf = true; items[items.length - 1].transform.op._mdf = true; 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)); if (iteration !== 0) { if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) { this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); } 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]); 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]); 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]); for (j = 0; j < jLen; j += 1) { itemsTransform[j] = this.matrix.props[j]; } this.matrix.reset(); } else { this.matrix.reset(); for (j = 0; j < jLen; j += 1) { itemsTransform[j] = this.matrix.props[j]; } } iteration += 1; cont -= 1; i += dir; } } else { cont = this._currentCopies; i = 0; dir = 1; while (cont) { items = this.elemsData[i].it; itemsTransform = items[items.length - 1].transform.mProps.v.props; items[items.length - 1].transform.mProps._mdf = false; items[items.length - 1].transform.op._mdf = false; cont -= 1; i += dir; } } return hasReloaded; }; RepeaterModifier.prototype.addShape = function () {}; function RoundCornersModifier() {} extendPrototype([ShapeModifier], RoundCornersModifier); RoundCornersModifier.prototype.initModifierProperties = function (elem, data) { this.getValue = this.processKeys; this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this); this._isAnimated = !!this.rd.effectsSequence.length; }; RoundCornersModifier.prototype.processPath = function (path, round) { var clonedPath = shapePool.newElement(); clonedPath.c = path.c; var i; var len = path._length; var currentV; var currentI; var currentO; var closerV; var distance; var newPosPerc; var index = 0; var vX; var vY; var oX; var oY; var iX; var iY; for (i = 0; i < len; i += 1) { currentV = path.v[i]; currentO = path.o[i]; currentI = path.i[i]; if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) { if ((i === 0 || i === len - 1) && !path.c) { clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index); /* clonedPath.v[index] = currentV; clonedPath.o[index] = currentO; clonedPath.i[index] = currentI; */ index += 1; } else { if (i === 0) { closerV = path.v[len - 1]; } else { closerV = path.v[i - 1]; } distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; vX = iX; iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc; vY = iY; oX = vX - (vX - currentV[0]) * roundCorner; oY = vY - (vY - currentV[1]) * roundCorner; clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index); index += 1; if (i === len - 1) { closerV = path.v[0]; } else { closerV = path.v[i + 1]; } distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; vX = oX; oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc; vY = oY; iX = vX - (vX - currentV[0]) * roundCorner; iY = vY - (vY - currentV[1]) * roundCorner; clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index); index += 1; } } else { 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); index += 1; } } return clonedPath; }; RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) { var shapePaths; var i; var len = this.shapes.length; var j; var jLen; var rd = this.rd.v; if (rd !== 0) { var shapeData; var localShapeCollection; for (i = 0; i < len; i += 1) { shapeData = this.shapes[i]; localShapeCollection = shapeData.localShapeCollection; if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { localShapeCollection.releaseShapes(); shapeData.shape._mdf = true; shapePaths = shapeData.shape.paths.shapes; jLen = shapeData.shape.paths._length; for (j = 0; j < jLen; j += 1) { localShapeCollection.addShape(this.processPath(shapePaths[j], rd)); } } shapeData.shape.paths = shapeData.localShapeCollection; } } if (!this.dynamicProperties.length) { this._mdf = false; } }; function floatEqual(a, b) { return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b)); } function floatZero(f) { return Math.abs(f) <= 0.00001; } function lerp(p0, p1, amount) { return p0 * (1 - amount) + p1 * amount; } function lerpPoint(p0, p1, amount) { return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)]; } function quadRoots(a, b, c) { // no root if (a === 0) return []; var s = b * b - 4 * a * c; // Complex roots if (s < 0) return []; var singleRoot = -b / (2 * a); // 1 root if (s === 0) return [singleRoot]; var delta = Math.sqrt(s) / (2 * a); // 2 roots return [singleRoot - delta, singleRoot + delta]; } function polynomialCoefficients(p0, p1, p2, p3) { return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0]; } function singlePoint(p) { return new PolynomialBezier(p, p, p, p, false); } function PolynomialBezier(p0, p1, p2, p3, linearize) { if (linearize && pointEqual(p0, p1)) { p1 = lerpPoint(p0, p3, 1 / 3); } if (linearize && pointEqual(p2, p3)) { p2 = lerpPoint(p0, p3, 2 / 3); } var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]); var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]); this.a = [coeffx[0], coeffy[0]]; this.b = [coeffx[1], coeffy[1]]; this.c = [coeffx[2], coeffy[2]]; this.d = [coeffx[3], coeffy[3]]; this.points = [p0, p1, p2, p3]; } PolynomialBezier.prototype.point = function (t) { return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]]; }; PolynomialBezier.prototype.derivative = function (t) { return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]]; }; PolynomialBezier.prototype.tangentAngle = function (t) { var p = this.derivative(t); return Math.atan2(p[1], p[0]); }; PolynomialBezier.prototype.normalAngle = function (t) { var p = this.derivative(t); return Math.atan2(p[0], p[1]); }; PolynomialBezier.prototype.inflectionPoints = function () { var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1]; if (floatZero(denom)) return []; var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom; var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom; if (square < 0) return []; var root = Math.sqrt(square); if (floatZero(root)) { if (root > 0 && root < 1) return [tcusp]; return []; } return [tcusp - root, tcusp + root].filter(function (r) { return r > 0 && r < 1; }); }; PolynomialBezier.prototype.split = function (t) { if (t <= 0) return [singlePoint(this.points[0]), this]; if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])]; var p10 = lerpPoint(this.points[0], this.points[1], t); var p11 = lerpPoint(this.points[1], this.points[2], t); var p12 = lerpPoint(this.points[2], this.points[3], t); var p20 = lerpPoint(p10, p11, t); var p21 = lerpPoint(p11, p12, t); var p3 = lerpPoint(p20, p21, t); return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)]; }; function extrema(bez, comp) { var min = bez.points[0][comp]; var max = bez.points[bez.points.length - 1][comp]; if (min > max) { var e = max; max = min; min = e; } // Derivative roots to find min/max var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]); for (var i = 0; i < f.length; i += 1) { if (f[i] > 0 && f[i] < 1) { var val = bez.point(f[i])[comp]; if (val < min) min = val;else if (val > max) max = val; } } return { min: min, max: max }; } PolynomialBezier.prototype.bounds = function () { return { x: extrema(this, 0), y: extrema(this, 1) }; }; PolynomialBezier.prototype.boundingBox = function () { var bounds = this.bounds(); return { left: bounds.x.min, right: bounds.x.max, top: bounds.y.min, bottom: bounds.y.max, width: bounds.x.max - bounds.x.min, height: bounds.y.max - bounds.y.min, cx: (bounds.x.max + bounds.x.min) / 2, cy: (bounds.y.max + bounds.y.min) / 2 }; }; function intersectData(bez, t1, t2) { var box = bez.boundingBox(); return { cx: box.cx, cy: box.cy, width: box.width, height: box.height, bez: bez, t: (t1 + t2) / 2, t1: t1, t2: t2 }; } function splitData(data) { var split = data.bez.split(0.5); return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)]; } function boxIntersect(b1, b2) { return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height; } function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) { if (!boxIntersect(d1, d2)) return; if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) { intersections.push([d1.t, d2.t]); return; } var d1s = splitData(d1); var d2s = splitData(d2); intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion); intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion); intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion); intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion); } PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) { if (tolerance === undefined) tolerance = 2; if (maxRecursion === undefined) maxRecursion = 7; var intersections = []; intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion); return intersections; }; PolynomialBezier.shapeSegment = function (shapePath, index) { var nextIndex = (index + 1) % shapePath.length(); return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true); }; PolynomialBezier.shapeSegmentInverted = function (shapePath, index) { var nextIndex = (index + 1) % shapePath.length(); return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true); }; function crossProduct(a, b) { return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; } function lineIntersection(start1, end1, start2, end2) { var v1 = [start1[0], start1[1], 1]; var v2 = [end1[0], end1[1], 1]; var v3 = [start2[0], start2[1], 1]; var v4 = [end2[0], end2[1], 1]; var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4)); if (floatZero(r[2])) return null; return [r[0] / r[2], r[1] / r[2]]; } function polarOffset(p, angle, length) { return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length]; } function pointDistance(p1, p2) { return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]); } function pointEqual(p1, p2) { return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]); } function ZigZagModifier() {} extendPrototype([ShapeModifier], ZigZagModifier); ZigZagModifier.prototype.initModifierProperties = function (elem, data) { this.getValue = this.processKeys; this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this); this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this); this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this); this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0; }; function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) { var angO = angle - Math.PI / 2; var angI = angle + Math.PI / 2; var px = point[0] + Math.cos(angle) * direction * amplitude; var py = point[1] - Math.sin(angle) * direction * amplitude; outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length()); } function getPerpendicularVector(pt1, pt2) { var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]]; var rot = -Math.PI * 0.5; var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]]; return rotatedVector; } function getProjectingAngle(path, cur) { var prevIndex = cur === 0 ? path.length() - 1 : cur - 1; var nextIndex = (cur + 1) % path.length(); var prevPoint = path.v[prevIndex]; var nextPoint = path.v[nextIndex]; var pVector = getPerpendicularVector(prevPoint, nextPoint); return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]); } function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) { var angle = getProjectingAngle(path, cur); var point = path.v[cur % path._length]; var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1]; var nextPoint = path.v[(cur + 1) % path._length]; var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0; var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0; setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType); } function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) { for (var i = 0; i < frequency; i += 1) { var t = (i + 1) / (frequency + 1); var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0; var angle = segment.normalAngle(t); var point = segment.point(t); setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType); direction = -direction; } return direction; } ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) { var count = path._length; var clonedPath = shapePool.newElement(); clonedPath.c = path.c; if (!path.c) { count -= 1; } if (count === 0) return clonedPath; var direction = -1; var segment = PolynomialBezier.shapeSegment(path, 0); zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction); for (var i = 0; i < count; i += 1) { direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction); if (i === count - 1 && !path.c) { segment = null; } else { segment = PolynomialBezier.shapeSegment(path, (i + 1) % count); } zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction); } return clonedPath; }; ZigZagModifier.prototype.processShapes = function (_isFirstFrame) { var shapePaths; var i; var len = this.shapes.length; var j; var jLen; var amplitude = this.amplitude.v; var frequency = Math.max(0, Math.round(this.frequency.v)); var pointType = this.pointsType.v; if (amplitude !== 0) { var shapeData; var localShapeCollection; for (i = 0; i < len; i += 1) { shapeData = this.shapes[i]; localShapeCollection = shapeData.localShapeCollection; if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { localShapeCollection.releaseShapes(); shapeData.shape._mdf = true; shapePaths = shapeData.shape.paths.shapes; jLen = shapeData.shape.paths._length; for (j = 0; j < jLen; j += 1) { localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType)); } } shapeData.shape.paths = shapeData.localShapeCollection; } } if (!this.dynamicProperties.length) { this._mdf = false; } }; function linearOffset(p1, p2, amount) { var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]); return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)]; } function offsetSegment(segment, amount) { var p0; var p1a; var p1b; var p2b; var p2a; var p3; var e; e = linearOffset(segment.points[0], segment.points[1], amount); p0 = e[0]; p1a = e[1]; e = linearOffset(segment.points[1], segment.points[2], amount); p1b = e[0]; p2b = e[1]; e = linearOffset(segment.points[2], segment.points[3], amount); p2a = e[0]; p3 = e[1]; var p1 = lineIntersection(p0, p1a, p1b, p2b); if (p1 === null) p1 = p1a; var p2 = lineIntersection(p2a, p3, p1b, p2b); if (p2 === null) p2 = p2a; return new PolynomialBezier(p0, p1, p2, p3); } function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) { var p0 = seg1.points[3]; var p1 = seg2.points[0]; // Bevel if (lineJoin === 3) return p0; // Connected, they don't need a joint if (pointEqual(p0, p1)) return p0; // Round if (lineJoin === 2) { var angleOut = -seg1.tangentAngle(1); var angleIn = -seg2.tangentAngle(0) + Math.PI; var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100)); var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2; var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner); outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1); tan = polarOffset(p1, angleIn, 2 * radius * roundCorner); outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length()); return p1; } // Miter var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2]; var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1]; var intersection = lineIntersection(t0, p0, p1, t1); if (intersection && pointDistance(intersection, p0) < miterLimit) { outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length()); return intersection; } return p0; } function getIntersection(a, b) { var intersect = a.intersections(b); if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift(); if (intersect.length) return intersect[0]; return null; } function pruneSegmentIntersection(a, b) { var outa = a.slice(); var outb = b.slice(); var intersect = getIntersection(a[a.length - 1], b[0]); if (intersect) { outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0]; outb[0] = b[0].split(intersect[1])[1]; } if (a.length > 1 && b.length > 1) { intersect = getIntersection(a[0], b[b.length - 1]); if (intersect) { return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]]; } } return [outa, outb]; } function pruneIntersections(segments) { var e; for (var i = 1; i < segments.length; i += 1) { e = pruneSegmentIntersection(segments[i - 1], segments[i]); segments[i - 1] = e[0]; segments[i] = e[1]; } if (segments.length > 1) { e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]); segments[segments.length - 1] = e[0]; segments[0] = e[1]; } return segments; } function offsetSegmentSplit(segment, amount) { /* We split each bezier segment into smaller pieces based on inflection points, this ensures the control point polygon is convex. (A cubic bezier can have none, one, or two inflection points) */ var flex = segment.inflectionPoints(); var left; var right; var split; var mid; if (flex.length === 0) { return [offsetSegment(segment, amount)]; } if (flex.length === 1 || floatEqual(flex[1], 1)) { split = segment.split(flex[0]); left = split[0]; right = split[1]; return [offsetSegment(left, amount), offsetSegment(right, amount)]; } split = segment.split(flex[0]); left = split[0]; var t = (flex[1] - flex[0]) / (1 - flex[0]); split = split[1].split(t); mid = split[0]; right = split[1]; return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)]; } function OffsetPathModifier() {} extendPrototype([ShapeModifier], OffsetPathModifier); OffsetPathModifier.prototype.initModifierProperties = function (elem, data) { this.getValue = this.processKeys; this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this); this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this); this.lineJoin = data.lj; this._isAnimated = this.amount.effectsSequence.length !== 0; }; OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) { var outputBezier = shapePool.newElement(); outputBezier.c = inputBezier.c; var count = inputBezier.length(); if (!inputBezier.c) { count -= 1; } var i; var j; var segment; var multiSegments = []; for (i = 0; i < count; i += 1) { segment = PolynomialBezier.shapeSegment(inputBezier, i); multiSegments.push(offsetSegmentSplit(segment, amount)); } if (!inputBezier.c) { for (i = count - 1; i >= 0; i -= 1) { segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i); multiSegments.push(offsetSegmentSplit(segment, amount)); } } multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints var lastPoint = null; var lastSeg = null; for (i = 0; i < multiSegments.length; i += 1) { var multiSegment = multiSegments[i]; if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit); lastSeg = multiSegment[multiSegment.length - 1]; for (j = 0; j < multiSegment.length; j += 1) { segment = multiSegment[j]; if (lastPoint && pointEqual(segment.points[0], lastPoint)) { outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1); } else { outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length()); } outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length()); lastPoint = segment.points[3]; } } if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit); return outputBezier; }; OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) { var shapePaths; var i; var len = this.shapes.length; var j; var jLen; var amount = this.amount.v; var miterLimit = this.miterLimit.v; var lineJoin = this.lineJoin; if (amount !== 0) { var shapeData; var localShapeCollection; for (i = 0; i < len; i += 1) { shapeData = this.shapes[i]; localShapeCollection = shapeData.localShapeCollection; if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { localShapeCollection.releaseShapes(); shapeData.shape._mdf = true; shapePaths = shapeData.shape.paths.shapes; jLen = shapeData.shape.paths._length; for (j = 0; j < jLen; j += 1) { localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit)); } } shapeData.shape.paths = shapeData.localShapeCollection; } } if (!this.dynamicProperties.length) { this._mdf = false; } }; function getFontProperties(fontData) { var styles = fontData.fStyle ? fontData.fStyle.split(' ') : []; var fWeight = 'normal'; var fStyle = 'normal'; var len = styles.length; var styleName; for (var i = 0; i < len; i += 1) { styleName = styles[i].toLowerCase(); switch (styleName) { case 'italic': fStyle = 'italic'; break; case 'bold': fWeight = '700'; break; case 'black': fWeight = '900'; break; case 'medium': fWeight = '500'; break; case 'regular': case 'normal': fWeight = '400'; break; case 'light': case 'thin': fWeight = '200'; break; default: break; } } return { style: fStyle, weight: fontData.fWeight || fWeight }; } var FontManager = function () { var maxWaitingTime = 5000; var emptyChar = { w: 0, size: 0, shapes: [], data: { shapes: [] } }; var combinedCharacters = []; // Hindi characters 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]); var BLACK_FLAG_CODE_POINT = 127988; var CANCEL_TAG_CODE_POINT = 917631; var A_TAG_CODE_POINT = 917601; var Z_TAG_CODE_POINT = 917626; var VARIATION_SELECTOR_16_CODE_POINT = 65039; var ZERO_WIDTH_JOINER_CODE_POINT = 8205; var REGIONAL_CHARACTER_A_CODE_POINT = 127462; var REGIONAL_CHARACTER_Z_CODE_POINT = 127487; var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff']; function trimFontOptions(font) { var familyArray = font.split(','); var i; var len = familyArray.length; var enabledFamilies = []; for (i = 0; i < len; i += 1) { if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') { enabledFamilies.push(familyArray[i]); } } return enabledFamilies.join(','); } function setUpNode(font, family) { var parentNode = createTag('span'); // Node is invisible to screen readers. parentNode.setAttribute('aria-hidden', true); parentNode.style.fontFamily = family; var node = createTag('span'); // Characters that vary significantly among different fonts node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen parentNode.style.position = 'absolute'; parentNode.style.left = '-10000px'; parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious parentNode.style.fontSize = '300px'; // Reset any font properties parentNode.style.fontVariant = 'normal'; parentNode.style.fontStyle = 'normal'; parentNode.style.fontWeight = 'normal'; parentNode.style.letterSpacing = '0'; parentNode.appendChild(node); document.body.appendChild(parentNode); // Remember width with no applied web font var width = node.offsetWidth; node.style.fontFamily = trimFontOptions(font) + ', ' + family; return { node: node, w: width, parent: parentNode }; } function checkLoadedFonts() { var i; var len = this.fonts.length; var node; var w; var loadedCount = len; for (i = 0; i < len; i += 1) { if (this.fonts[i].loaded) { loadedCount -= 1; } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) { this.fonts[i].loaded = true; } else { node = this.fonts[i].monoCase.node; w = this.fonts[i].monoCase.w; if (node.offsetWidth !== w) { loadedCount -= 1; this.fonts[i].loaded = true; } else { node = this.fonts[i].sansCase.node; w = this.fonts[i].sansCase.w; if (node.offsetWidth !== w) { loadedCount -= 1; this.fonts[i].loaded = true; } } if (this.fonts[i].loaded) { this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent); this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent); } } } if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) { setTimeout(this.checkLoadedFontsBinded, 20); } else { setTimeout(this.setIsLoadedBinded, 10); } } function createHelper(fontData, def) { var engine = document.body && def ? 'svg' : 'canvas'; var helper; var fontProps = getFontProperties(fontData); if (engine === 'svg') { var tHelper = createNS('text'); tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily; tHelper.setAttribute('font-family', fontData.fFamily); tHelper.setAttribute('font-style', fontProps.style); tHelper.setAttribute('font-weight', fontProps.weight); tHelper.textContent = '1'; if (fontData.fClass) { tHelper.style.fontFamily = 'inherit'; tHelper.setAttribute('class', fontData.fClass); } else { tHelper.style.fontFamily = fontData.fFamily; } def.appendChild(tHelper); helper = tHelper; } else { var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d'); tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily; helper = tCanvasHelper; } function measure(text) { if (engine === 'svg') { helper.textContent = text; return helper.getComputedTextLength(); } return helper.measureText(text).width; } return { measureText: measure }; } function addFonts(fontData, defs) { if (!fontData) { this.isLoaded = true; return; } if (this.chars) { this.isLoaded = true; this.fonts = fontData.list; return; } if (!document.body) { this.isLoaded = true; fontData.list.forEach(function (data) { data.helper = createHelper(data); data.cache = {}; }); this.fonts = fontData.list; return; } var fontArr = fontData.list; var i; var len = fontArr.length; var _pendingFonts = len; for (i = 0; i < len; i += 1) { var shouldLoadFont = true; var loadedSelector; var j; fontArr[i].loaded = false; fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace'); fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif'); if (!fontArr[i].fPath) { fontArr[i].loaded = true; _pendingFonts -= 1; } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) { loadedSelector = document.querySelectorAll('style[f-forigin="p"][f-family="' + fontArr[i].fFamily + '"], style[f-origin="3"][f-family="' + fontArr[i].fFamily + '"]'); if (loadedSelector.length > 0) { shouldLoadFont = false; } if (shouldLoadFont) { var s = createTag('style'); s.setAttribute('f-forigin', fontArr[i].fOrigin); s.setAttribute('f-origin', fontArr[i].origin); s.setAttribute('f-family', fontArr[i].fFamily); s.type = 'text/css'; s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + "; font-style: normal; src: url('" + fontArr[i].fPath + "');}"; defs.appendChild(s); } } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) { loadedSelector = document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'); for (j = 0; j < loadedSelector.length; j += 1) { if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) { // Font is already loaded shouldLoadFont = false; } } if (shouldLoadFont) { var l = createTag('link'); l.setAttribute('f-forigin', fontArr[i].fOrigin); l.setAttribute('f-origin', fontArr[i].origin); l.type = 'text/css'; l.rel = 'stylesheet'; l.href = fontArr[i].fPath; document.body.appendChild(l); } } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) { loadedSelector = document.querySelectorAll('script[f-forigin="t"], script[f-origin="2"]'); for (j = 0; j < loadedSelector.length; j += 1) { if (fontArr[i].fPath === loadedSelector[j].src) { // Font is already loaded shouldLoadFont = false; } } if (shouldLoadFont) { var sc = createTag('link'); sc.setAttribute('f-forigin', fontArr[i].fOrigin); sc.setAttribute('f-origin', fontArr[i].origin); sc.setAttribute('rel', 'stylesheet'); sc.setAttribute('href', fontArr[i].fPath); defs.appendChild(sc); } } fontArr[i].helper = createHelper(fontArr[i], defs); fontArr[i].cache = {}; this.fonts.push(fontArr[i]); } if (_pendingFonts === 0) { this.isLoaded = true; } else { // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas. // Adding this timeout seems to fix it setTimeout(this.checkLoadedFonts.bind(this), 100); } } function addChars(chars) { if (!chars) { return; } if (!this.chars) { this.chars = []; } var i; var len = chars.length; var j; var jLen = this.chars.length; var found; for (i = 0; i < len; i += 1) { j = 0; found = false; while (j < jLen) { if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) { found = true; } j += 1; } if (!found) { this.chars.push(chars[i]); jLen += 1; } } } function getCharData(_char, style, font) { var i = 0; var len = this.chars.length; while (i < len) { if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) { return this.chars[i]; } i += 1; } if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console && !this._warned) { this._warned = true; console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console } return emptyChar; } function measureText(_char2, fontName, size) { var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0) // to avoid collisions between equal chars var index = _char2; if (!fontData.cache[index]) { var tHelper = fontData.helper; if (_char2 === ' ') { var doubleSize = tHelper.measureText('|' + _char2 + '|'); var singleSize = tHelper.measureText('||'); fontData.cache[index] = (doubleSize - singleSize) / 100; } else { fontData.cache[index] = tHelper.measureText(_char2) / 100; } } return fontData.cache[index] * size; } function getFontByName(name) { var i = 0; var len = this.fonts.length; while (i < len) { if (this.fonts[i].fName === name) { return this.fonts[i]; } i += 1; } return this.fonts[0]; } function getCodePoint(string) { var codePoint = 0; var first = string.charCodeAt(0); if (first >= 0xD800 && first <= 0xDBFF) { var second = string.charCodeAt(1); if (second >= 0xDC00 && second <= 0xDFFF) { codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; } } return codePoint; } // Skin tone modifiers function isModifier(firstCharCode, secondCharCode) { var sum = firstCharCode.toString(16) + secondCharCode.toString(16); return surrogateModifiers.indexOf(sum) !== -1; } function isZeroWidthJoiner(charCode) { return charCode === ZERO_WIDTH_JOINER_CODE_POINT; } // This codepoint may change the appearance of the preceding character. // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered // as a colorful image as compared to a monochrome text variant. function isVariationSelector(charCode) { return charCode === VARIATION_SELECTOR_16_CODE_POINT; } // The regional indicator symbols are a set of 26 alphabetic Unicode /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2 // two-letter country codes in a way that allows optional special treatment. function isRegionalCode(string) { var codePoint = getCodePoint(string); if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) { return true; } return false; } // Some Emoji implementations represent combinations of // two “regional indicator” letters as a single flag symbol. function isFlagEmoji(string) { return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2)); } function isCombinedCharacter(_char3) { return combinedCharacters.indexOf(_char3) !== -1; } // Regional flags start with a BLACK_FLAG_CODE_POINT // folowed by 5 chars in the TAG range // and end with a CANCEL_TAG_CODE_POINT function isRegionalFlag(text, index) { var codePoint = getCodePoint(text.substr(index, 2)); if (codePoint !== BLACK_FLAG_CODE_POINT) { return false; } var count = 0; index += 2; while (count < 5) { codePoint = getCodePoint(text.substr(index, 2)); if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) { return false; } count += 1; index += 2; } return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT; } function setIsLoaded() { this.isLoaded = true; } var Font = function Font() { this.fonts = []; this.chars = null; this.typekitLoaded = 0; this.isLoaded = false; this._warned = false; this.initTime = Date.now(); this.setIsLoadedBinded = this.setIsLoaded.bind(this); this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this); }; Font.isModifier = isModifier; Font.isZeroWidthJoiner = isZeroWidthJoiner; Font.isFlagEmoji = isFlagEmoji; Font.isRegionalCode = isRegionalCode; Font.isCombinedCharacter = isCombinedCharacter; Font.isRegionalFlag = isRegionalFlag; Font.isVariationSelector = isVariationSelector; Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT; var fontPrototype = { addChars: addChars, addFonts: addFonts, getCharData: getCharData, getFontByName: getFontByName, measureText: measureText, checkLoadedFonts: checkLoadedFonts, setIsLoaded: setIsLoaded }; Font.prototype = fontPrototype; return Font; }(); function SlotManager(animationData) { this.animationData = animationData; } SlotManager.prototype.getProp = function (data) { if (this.animationData.slots && this.animationData.slots[data.sid]) { return Object.assign(data, this.animationData.slots[data.sid].p); } return data; }; function slotFactory(animationData) { return new SlotManager(animationData); } function RenderableElement() {} RenderableElement.prototype = { initRenderable: function initRenderable() { // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange this.isInRange = false; // layer's display state this.hidden = false; // If layer's transparency equals 0, it can be hidden this.isTransparent = false; // list of animated components this.renderableComponents = []; }, addRenderableComponent: function addRenderableComponent(component) { if (this.renderableComponents.indexOf(component) === -1) { this.renderableComponents.push(component); } }, removeRenderableComponent: function removeRenderableComponent(component) { if (this.renderableComponents.indexOf(component) !== -1) { this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1); } }, prepareRenderableFrame: function prepareRenderableFrame(num) { this.checkLayerLimits(num); }, checkTransparency: function checkTransparency() { if (this.finalTransform.mProp.o.v <= 0) { if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) { this.isTransparent = true; this.hide(); } } else if (this.isTransparent) { this.isTransparent = false; this.show(); } }, /** * @function * Initializes frame related properties. * * @param {number} num * current frame number in Layer's time * */ checkLayerLimits: function checkLayerLimits(num) { if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) { if (this.isInRange !== true) { this.globalData._mdf = true; this._mdf = true; this.isInRange = true; this.show(); } } else if (this.isInRange !== false) { this.globalData._mdf = true; this.isInRange = false; this.hide(); } }, renderRenderable: function renderRenderable() { var i; var len = this.renderableComponents.length; for (i = 0; i < len; i += 1) { this.renderableComponents[i].renderFrame(this._isFirstFrame); } /* this.maskManager.renderFrame(this.finalTransform.mat); this.renderableEffectsManager.renderFrame(this._isFirstFrame); */ }, sourceRectAtTime: function sourceRectAtTime() { return { top: 0, left: 0, width: 100, height: 100 }; }, getLayerSize: function getLayerSize() { if (this.data.ty === 5) { return { w: this.data.textData.width, h: this.data.textData.height }; } return { w: this.data.width, h: this.data.height }; } }; var getBlendMode = function () { var blendModeEnums = { 0: 'source-over', 1: 'multiply', 2: 'screen', 3: 'overlay', 4: 'darken', 5: 'lighten', 6: 'color-dodge', 7: 'color-burn', 8: 'hard-light', 9: 'soft-light', 10: 'difference', 11: 'exclusion', 12: 'hue', 13: 'saturation', 14: 'color', 15: 'luminosity' }; return function (mode) { return blendModeEnums[mode] || ''; }; }(); function SliderEffect(data, elem, container) { this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); } function AngleEffect(data, elem, container) { this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); } function ColorEffect(data, elem, container) { this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container); } function PointEffect(data, elem, container) { this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container); } function LayerIndexEffect(data, elem, container) { this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); } function MaskIndexEffect(data, elem, container) { this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); } function CheckboxEffect(data, elem, container) { this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); } function NoValueEffect() { this.p = {}; } function EffectsManager(data, element) { var effects = data.ef || []; this.effectElements = []; var i; var len = effects.length; var effectItem; for (i = 0; i < len; i += 1) { effectItem = new GroupEffect(effects[i], element); this.effectElements.push(effectItem); } } function GroupEffect(data, element) { this.init(data, element); } extendPrototype([DynamicPropertyContainer], GroupEffect); GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties; GroupEffect.prototype.init = function (data, element) { this.data = data; this.effectElements = []; this.initDynamicPropertyContainer(element); var i; var len = this.data.ef.length; var eff; var effects = this.data.ef; for (i = 0; i < len; i += 1) { eff = null; switch (effects[i].ty) { case 0: eff = new SliderEffect(effects[i], element, this); break; case 1: eff = new AngleEffect(effects[i], element, this); break; case 2: eff = new ColorEffect(effects[i], element, this); break; case 3: eff = new PointEffect(effects[i], element, this); break; case 4: case 7: eff = new CheckboxEffect(effects[i], element, this); break; case 10: eff = new LayerIndexEffect(effects[i], element, this); break; case 11: eff = new MaskIndexEffect(effects[i], element, this); break; case 5: eff = new EffectsManager(effects[i], element, this); break; // case 6: default: eff = new NoValueEffect(effects[i], element, this); break; } if (eff) { this.effectElements.push(eff); } } }; function BaseElement() {} BaseElement.prototype = { checkMasks: function checkMasks() { if (!this.data.hasMask) { return false; } var i = 0; var len = this.data.masksProperties.length; while (i < len) { if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) { return true; } i += 1; } return false; }, initExpressions: function initExpressions() { var expressionsInterfaces = getExpressionInterfaces(); if (!expressionsInterfaces) { return; } var LayerExpressionInterface = expressionsInterfaces('layer'); var EffectsExpressionInterface = expressionsInterfaces('effects'); var ShapeExpressionInterface = expressionsInterfaces('shape'); var TextExpressionInterface = expressionsInterfaces('text'); var CompExpressionInterface = expressionsInterfaces('comp'); this.layerInterface = LayerExpressionInterface(this); if (this.data.hasMask && this.maskManager) { this.layerInterface.registerMaskInterface(this.maskManager); } var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface); this.layerInterface.registerEffectsInterface(effectsInterface); if (this.data.ty === 0 || this.data.xt) { this.compInterface = CompExpressionInterface(this); } else if (this.data.ty === 4) { this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface); this.layerInterface.content = this.layerInterface.shapeInterface; } else if (this.data.ty === 5) { this.layerInterface.textInterface = TextExpressionInterface(this); this.layerInterface.text = this.layerInterface.textInterface; } }, setBlendMode: function setBlendMode() { var blendModeValue = getBlendMode(this.data.bm); var elem = this.baseElement || this.layerElement; elem.style['mix-blend-mode'] = blendModeValue; }, initBaseData: function initBaseData(data, globalData, comp) { this.globalData = globalData; this.comp = comp; this.data = data; this.layerId = createElementID(); // Stretch factor for old animations missing this property. if (!this.data.sr) { this.data.sr = 1; } // effects manager this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties); }, getType: function getType() { return this.type; }, sourceRectAtTime: function sourceRectAtTime() {} }; /** * @file * Handles element's layer frame update. * Checks layer in point and out point * */ function FrameElement() {} FrameElement.prototype = { /** * @function * Initializes frame related properties. * */ initFrame: function initFrame() { // set to true when inpoint is rendered this._isFirstFrame = false; // list of animated properties this.dynamicProperties = []; // If layer has been modified in current tick this will be true this._mdf = false; }, /** * @function * Calculates all dynamic values * * @param {number} num * current frame number in Layer's time * @param {boolean} isVisible * if layers is currently in range * */ prepareProperties: function prepareProperties(num, isVisible) { var i; var len = this.dynamicProperties.length; for (i = 0; i < len; i += 1) { if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') { this.dynamicProperties[i].getValue(); if (this.dynamicProperties[i]._mdf) { this.globalData._mdf = true; this._mdf = true; } } } }, addDynamicProperty: function addDynamicProperty(prop) { if (this.dynamicProperties.indexOf(prop) === -1) { this.dynamicProperties.push(prop); } } }; function FootageElement(data, globalData, comp) { this.initFrame(); this.initRenderable(); this.assetData = globalData.getAssetData(data.refId); this.footageData = globalData.imageLoader.getAsset(this.assetData); this.initBaseData(data, globalData, comp); } FootageElement.prototype.prepareFrame = function () {}; extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement); FootageElement.prototype.getBaseElement = function () { return null; }; FootageElement.prototype.renderFrame = function () {}; FootageElement.prototype.destroy = function () {}; FootageElement.prototype.initExpressions = function () { var expressionsInterfaces = getExpressionInterfaces(); if (!expressionsInterfaces) { return; } var FootageInterface = expressionsInterfaces('footage'); this.layerInterface = FootageInterface(this); }; FootageElement.prototype.getFootageData = function () { return this.footageData; }; function AudioElement(data, globalData, comp) { this.initFrame(); this.initRenderable(); this.assetData = globalData.getAssetData(data.refId); this.initBaseData(data, globalData, comp); this._isPlaying = false; this._canPlay = false; var assetPath = this.globalData.getAssetsPath(this.assetData); this.audio = this.globalData.audioController.createAudio(assetPath); this._currentTime = 0; this.globalData.audioController.addAudio(this); this._volumeMultiplier = 1; this._volume = 1; this._previousVolume = null; this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : { k: [100] }, 1, 0.01, this); } AudioElement.prototype.prepareFrame = function (num) { this.prepareRenderableFrame(num, true); this.prepareProperties(num, true); if (!this.tm._placeholder) { var timeRemapped = this.tm.v; this._currentTime = timeRemapped; } else { this._currentTime = num / this.data.sr; } this._volume = this.lv.v[0]; var totalVolume = this._volume * this._volumeMultiplier; if (this._previousVolume !== totalVolume) { this._previousVolume = totalVolume; this.audio.volume(totalVolume); } }; extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement); AudioElement.prototype.renderFrame = function () { if (this.isInRange && this._canPlay) { if (!this._isPlaying) { this.audio.play(); this.audio.seek(this._currentTime / this.globalData.frameRate); this._isPlaying = true; } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) { this.audio.seek(this._currentTime / this.globalData.frameRate); } } }; AudioElement.prototype.show = function () { // this.audio.play() }; AudioElement.prototype.hide = function () { this.audio.pause(); this._isPlaying = false; }; AudioElement.prototype.pause = function () { this.audio.pause(); this._isPlaying = false; this._canPlay = false; }; AudioElement.prototype.resume = function () { this._canPlay = true; }; AudioElement.prototype.setRate = function (rateValue) { this.audio.rate(rateValue); }; AudioElement.prototype.volume = function (volumeValue) { this._volumeMultiplier = volumeValue; this._previousVolume = volumeValue * this._volume; this.audio.volume(this._previousVolume); }; AudioElement.prototype.getBaseElement = function () { return null; }; AudioElement.prototype.destroy = function () {}; AudioElement.prototype.sourceRectAtTime = function () {}; AudioElement.prototype.initExpressions = function () {}; function BaseRenderer() {} BaseRenderer.prototype.checkLayers = function (num) { var i; var len = this.layers.length; var data; this.completeLayers = true; for (i = len - 1; i >= 0; i -= 1) { if (!this.elements[i]) { data = this.layers[i]; if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) { this.buildItem(i); } } this.completeLayers = this.elements[i] ? this.completeLayers : false; } this.checkPendingElements(); }; BaseRenderer.prototype.createItem = function (layer) { switch (layer.ty) { case 2: return this.createImage(layer); case 0: return this.createComp(layer); case 1: return this.createSolid(layer); case 3: return this.createNull(layer); case 4: return this.createShape(layer); case 5: return this.createText(layer); case 6: return this.createAudio(layer); case 13: return this.createCamera(layer); case 15: return this.createFootage(layer); default: return this.createNull(layer); } }; BaseRenderer.prototype.createCamera = function () { throw new Error('You\'re using a 3d camera. Try the html renderer.'); }; BaseRenderer.prototype.createAudio = function (data) { return new AudioElement(data, this.globalData, this); }; BaseRenderer.prototype.createFootage = function (data) { return new FootageElement(data, this.globalData, this); }; BaseRenderer.prototype.buildAllItems = function () { var i; var len = this.layers.length; for (i = 0; i < len; i += 1) { this.buildItem(i); } this.checkPendingElements(); }; BaseRenderer.prototype.includeLayers = function (newLayers) { this.completeLayers = false; var i; var len = newLayers.length; var j; var jLen = this.layers.length; for (i = 0; i < len; i += 1) { j = 0; while (j < jLen) { if (this.layers[j].id === newLayers[i].id) { this.layers[j] = newLayers[i]; break; } j += 1; } } }; BaseRenderer.prototype.setProjectInterface = function (pInterface) { this.globalData.projectInterface = pInterface; }; BaseRenderer.prototype.initItems = function () { if (!this.globalData.progressiveLoad) { this.buildAllItems(); } }; BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) { var elements = this.elements; var layers = this.layers; var i = 0; var len = layers.length; while (i < len) { if (layers[i].ind == parentName) { // eslint-disable-line eqeqeq if (!elements[i] || elements[i] === true) { this.buildItem(i); this.addPendingElement(element); } else { hierarchy.push(elements[i]); elements[i].setAsParent(); if (layers[i].parent !== undefined) { this.buildElementParenting(element, layers[i].parent, hierarchy); } else { element.setHierarchy(hierarchy); } } } i += 1; } }; BaseRenderer.prototype.addPendingElement = function (element) { this.pendingElements.push(element); }; BaseRenderer.prototype.searchExtraCompositions = function (assets) { var i; var len = assets.length; for (i = 0; i < len; i += 1) { if (assets[i].xt) { var comp = this.createComp(assets[i]); comp.initExpressions(); this.globalData.projectInterface.registerComposition(comp); } } }; BaseRenderer.prototype.getElementById = function (ind) { var i; var len = this.elements.length; for (i = 0; i < len; i += 1) { if (this.elements[i].data.ind === ind) { return this.elements[i]; } } return null; }; BaseRenderer.prototype.getElementByPath = function (path) { var pathValue = path.shift(); var element; if (typeof pathValue === 'number') { element = this.elements[pathValue]; } else { var i; var len = this.elements.length; for (i = 0; i < len; i += 1) { if (this.elements[i].data.nm === pathValue) { element = this.elements[i]; break; } } } if (path.length === 0) { return element; } return element.getElementByPath(path); }; BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) { this.globalData.fontManager = new FontManager(); this.globalData.slotManager = slotFactory(animData); this.globalData.fontManager.addChars(animData.chars); this.globalData.fontManager.addFonts(animData.fonts, fontsContainer); this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem); this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem); this.globalData.imageLoader = this.animationItem.imagePreloader; this.globalData.audioController = this.animationItem.audioController; this.globalData.frameId = 0; this.globalData.frameRate = animData.fr; this.globalData.nm = animData.nm; this.globalData.compSize = { w: animData.w, h: animData.h }; }; var effectTypes = { TRANSFORM_EFFECT: 'transformEFfect' }; function TransformElement() {} TransformElement.prototype = { initTransform: function initTransform() { var mat = new Matrix(); this.finalTransform = { mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 }, _matMdf: false, _localMatMdf: false, _opMdf: false, mat: mat, localMat: mat, localOpacity: 1 }; if (this.data.ao) { this.finalTransform.mProp.autoOriented = true; } // TODO: check TYPE 11: Guided elements if (this.data.ty !== 11) { // this.createElements(); } }, renderTransform: function renderTransform() { this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame; this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame; if (this.hierarchy) { var mat; var finalMat = this.finalTransform.mat; var i = 0; var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed. if (!this.finalTransform._matMdf) { while (i < len) { if (this.hierarchy[i].finalTransform.mProp._mdf) { this.finalTransform._matMdf = true; break; } i += 1; } } if (this.finalTransform._matMdf) { mat = this.finalTransform.mProp.v.props; finalMat.cloneFromProps(mat); for (i = 0; i < len; i += 1) { finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v); } } } if (!this.localTransforms || this.finalTransform._matMdf) { this.finalTransform._localMatMdf = this.finalTransform._matMdf; } if (this.finalTransform._opMdf) { this.finalTransform.localOpacity = this.finalTransform.mProp.o.v; } }, renderLocalTransform: function renderLocalTransform() { if (this.localTransforms) { var i = 0; var len = this.localTransforms.length; this.finalTransform._localMatMdf = this.finalTransform._matMdf; if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) { while (i < len) { if (this.localTransforms[i]._mdf) { this.finalTransform._localMatMdf = true; } if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) { this.finalTransform.localOpacity = this.finalTransform.mProp.o.v; this.finalTransform._opMdf = true; } i += 1; } } if (this.finalTransform._localMatMdf) { var localMat = this.finalTransform.localMat; this.localTransforms[0].matrix.clone(localMat); for (i = 1; i < len; i += 1) { var lmat = this.localTransforms[i].matrix; localMat.multiply(lmat); } localMat.multiply(this.finalTransform.mat); } if (this.finalTransform._opMdf) { var localOp = this.finalTransform.localOpacity; for (i = 0; i < len; i += 1) { localOp *= this.localTransforms[i].opacity * 0.01; } this.finalTransform.localOpacity = localOp; } } }, searchEffectTransforms: function searchEffectTransforms() { if (this.renderableEffectsManager) { var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT); if (transformEffects.length) { this.localTransforms = []; this.finalTransform.localMat = new Matrix(); var i = 0; var len = transformEffects.length; for (i = 0; i < len; i += 1) { this.localTransforms.push(transformEffects[i]); } } } }, globalToLocal: function globalToLocal(pt) { var transforms = []; transforms.push(this.finalTransform); var flag = true; var comp = this.comp; while (flag) { if (comp.finalTransform) { if (comp.data.hasMask) { transforms.splice(0, 0, comp.finalTransform); } comp = comp.comp; } else { flag = false; } } var i; var len = transforms.length; var ptNew; for (i = 0; i < len; i += 1) { ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]); pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0]; } return pt; }, mHelper: new Matrix() }; function MaskElement(data, element, globalData) { this.data = data; this.element = element; this.globalData = globalData; this.storedData = []; this.masksProperties = this.data.masksProperties || []; this.maskElement = null; var defs = this.globalData.defs; var i; var len = this.masksProperties ? this.masksProperties.length : 0; this.viewData = createSizedArray(len); this.solidPath = ''; var path; var properties = this.masksProperties; var count = 0; var currentMasks = []; var j; var jLen; var layerId = createElementID(); var rect; var expansor; var feMorph; var x; var maskType = 'clipPath'; var maskRef = 'clip-path'; for (i = 0; i < len; i += 1) { if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) { maskType = 'mask'; maskRef = 'mask'; } if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) { rect = createNS('rect'); rect.setAttribute('fill', '#ffffff'); rect.setAttribute('width', this.element.comp.data.w || 0); rect.setAttribute('height', this.element.comp.data.h || 0); currentMasks.push(rect); } else { rect = null; } path = createNS('path'); if (properties[i].mode === 'n') { // TODO move this to a factory or to a constructor this.viewData[i] = { op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element), prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), elem: path, lastPath: '' }; defs.appendChild(path); } else { count += 1; path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff'); path.setAttribute('clip-rule', 'nonzero'); var filterID; if (properties[i].x.k !== 0) { maskType = 'mask'; maskRef = 'mask'; x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element); filterID = createElementID(); expansor = createNS('filter'); expansor.setAttribute('id', filterID); feMorph = createNS('feMorphology'); feMorph.setAttribute('operator', 'erode'); feMorph.setAttribute('in', 'SourceGraphic'); feMorph.setAttribute('radius', '0'); expansor.appendChild(feMorph); defs.appendChild(expansor); path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff'); } else { feMorph = null; x = null; } // TODO move this to a factory or to a constructor this.storedData[i] = { elem: path, x: x, expan: feMorph, lastPath: '', lastOperator: '', filterId: filterID, lastRadius: 0 }; if (properties[i].mode === 'i') { jLen = currentMasks.length; var g = createNS('g'); for (j = 0; j < jLen; j += 1) { g.appendChild(currentMasks[j]); } var mask = createNS('mask'); mask.setAttribute('mask-type', 'alpha'); mask.setAttribute('id', layerId + '_' + count); mask.appendChild(path); defs.appendChild(mask); g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')'); currentMasks.length = 0; currentMasks.push(g); } else { currentMasks.push(path); } if (properties[i].inv && !this.solidPath) { this.solidPath = this.createLayerSolidPath(); } // TODO move this to a factory or to a constructor this.viewData[i] = { elem: path, lastPath: '', op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element), prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), invRect: rect }; if (!this.viewData[i].prop.k) { this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]); } } } this.maskElement = createNS(maskType); len = currentMasks.length; for (i = 0; i < len; i += 1) { this.maskElement.appendChild(currentMasks[i]); } if (count > 0) { this.maskElement.setAttribute('id', layerId); this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')'); defs.appendChild(this.maskElement); } if (this.viewData.length) { this.element.addRenderableComponent(this); } } MaskElement.prototype.getMaskProperty = function (pos) { return this.viewData[pos].prop; }; MaskElement.prototype.renderFrame = function (isFirstFrame) { var finalMat = this.element.finalTransform.mat; var i; var len = this.masksProperties.length; for (i = 0; i < len; i += 1) { if (this.viewData[i].prop._mdf || isFirstFrame) { this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]); } if (this.viewData[i].op._mdf || isFirstFrame) { this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v); } if (this.masksProperties[i].mode !== 'n') { if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) { this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS()); } if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) { var feMorph = this.storedData[i].expan; if (this.storedData[i].x.v < 0) { if (this.storedData[i].lastOperator !== 'erode') { this.storedData[i].lastOperator = 'erode'; this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')'); } feMorph.setAttribute('radius', -this.storedData[i].x.v); } else { if (this.storedData[i].lastOperator !== 'dilate') { this.storedData[i].lastOperator = 'dilate'; this.storedData[i].elem.setAttribute('filter', null); } this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2); } } } } }; MaskElement.prototype.getMaskelement = function () { return this.maskElement; }; MaskElement.prototype.createLayerSolidPath = function () { var path = 'M0,0 '; path += ' h' + this.globalData.compSize.w; path += ' v' + this.globalData.compSize.h; path += ' h-' + this.globalData.compSize.w; path += ' v-' + this.globalData.compSize.h + ' '; return path; }; MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) { var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1]; var i; var len; len = pathNodes._length; for (i = 1; i < len; i += 1) { // 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]; 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]; } // 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]; if (pathNodes.c && len > 1) { 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]; } // pathNodes.__renderedString = pathString; if (viewData.lastPath !== pathString) { var pathShapeValue = ''; if (viewData.elem) { if (pathNodes.c) { pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString; } viewData.elem.setAttribute('d', pathShapeValue); } viewData.lastPath = pathString; } }; MaskElement.prototype.destroy = function () { this.element = null; this.globalData = null; this.maskElement = null; this.data = null; this.masksProperties = null; }; var filtersFactory = function () { var ob = {}; ob.createFilter = createFilter; ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter; function createFilter(filId, skipCoordinates) { var fil = createNS('filter'); fil.setAttribute('id', filId); if (skipCoordinates !== true) { fil.setAttribute('filterUnits', 'objectBoundingBox'); fil.setAttribute('x', '0%'); fil.setAttribute('y', '0%'); fil.setAttribute('width', '100%'); fil.setAttribute('height', '100%'); } return fil; } function createAlphaToLuminanceFilter() { var feColorMatrix = createNS('feColorMatrix'); feColorMatrix.setAttribute('type', 'matrix'); feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB'); feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1'); return feColorMatrix; } return ob; }(); var featureSupport = function () { var ob = { maskType: true, svgLumaHidden: true, offscreenCanvas: typeof OffscreenCanvas !== 'undefined' }; 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)) { ob.maskType = false; } if (/firefox/i.test(navigator.userAgent)) { ob.svgLumaHidden = false; } return ob; }(); var registeredEffects$1 = {}; var idPrefix = 'filter_result_'; function SVGEffects(elem) { var i; var source = 'SourceGraphic'; var len = elem.data.ef ? elem.data.ef.length : 0; var filId = createElementID(); var fil = filtersFactory.createFilter(filId, true); var count = 0; this.filters = []; var filterManager; for (i = 0; i < len; i += 1) { filterManager = null; var type = elem.data.ef[i].ty; if (registeredEffects$1[type]) { var Effect = registeredEffects$1[type].effect; filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source); source = idPrefix + count; if (registeredEffects$1[type].countsAsEffect) { count += 1; } } if (filterManager) { this.filters.push(filterManager); } } if (count) { elem.globalData.defs.appendChild(fil); elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')'); } if (this.filters.length) { elem.addRenderableComponent(this); } } SVGEffects.prototype.renderFrame = function (_isFirstFrame) { var i; var len = this.filters.length; for (i = 0; i < len; i += 1) { this.filters[i].renderFrame(_isFirstFrame); } }; SVGEffects.prototype.getEffects = function (type) { var i; var len = this.filters.length; var effects = []; for (i = 0; i < len; i += 1) { if (this.filters[i].type === type) { effects.push(this.filters[i]); } } return effects; }; function registerEffect$1(id, effect, countsAsEffect) { registeredEffects$1[id] = { effect: effect, countsAsEffect: countsAsEffect }; } function SVGBaseElement() {} SVGBaseElement.prototype = { initRendererElement: function initRendererElement() { this.layerElement = createNS('g'); }, createContainerElements: function createContainerElements() { this.matteElement = createNS('g'); this.transformedElement = this.layerElement; this.maskedElement = this.layerElement; this._sizeChanged = false; var layerElementParent = null; // If this layer acts as a mask for the following layer if (this.data.td) { this.matteMasks = {}; var gg = createNS('g'); gg.setAttribute('id', this.layerId); gg.appendChild(this.layerElement); layerElementParent = gg; this.globalData.defs.appendChild(gg); } else if (this.data.tt) { this.matteElement.appendChild(this.layerElement); layerElementParent = this.matteElement; this.baseElement = this.matteElement; } else { this.baseElement = this.layerElement; } if (this.data.ln) { this.layerElement.setAttribute('id', this.data.ln); } if (this.data.cl) { this.layerElement.setAttribute('class', this.data.cl); } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped if (this.data.ty === 0 && !this.data.hd) { var cp = createNS('clipPath'); var pt = createNS('path'); pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z'); var clipId = createElementID(); cp.setAttribute('id', clipId); cp.appendChild(pt); this.globalData.defs.appendChild(cp); if (this.checkMasks()) { var cpGroup = createNS('g'); cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')'); cpGroup.appendChild(this.layerElement); this.transformedElement = cpGroup; if (layerElementParent) { layerElementParent.appendChild(this.transformedElement); } else { this.baseElement = this.transformedElement; } } else { this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')'); } } if (this.data.bm !== 0) { this.setBlendMode(); } }, renderElement: function renderElement() { if (this.finalTransform._localMatMdf) { this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS()); } if (this.finalTransform._opMdf) { this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity); } }, destroyBaseElement: function destroyBaseElement() { this.layerElement = null; this.matteElement = null; this.maskManager.destroy(); }, getBaseElement: function getBaseElement() { if (this.data.hd) { return null; } return this.baseElement; }, createRenderableComponents: function createRenderableComponents() { this.maskManager = new MaskElement(this.data, this, this.globalData); this.renderableEffectsManager = new SVGEffects(this); this.searchEffectTransforms(); }, getMatte: function getMatte(matteType) { // This should not be a common case. But for backward compatibility, we'll create the matte object. // It solves animations that have two consecutive layers marked as matte masks. // Which is an undefined behavior in AE. if (!this.matteMasks) { this.matteMasks = {}; } if (!this.matteMasks[matteType]) { var id = this.layerId + '_' + matteType; var filId; var fil; var useElement; var gg; if (matteType === 1 || matteType === 3) { var masker = createNS('mask'); masker.setAttribute('id', id); masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha'); useElement = createNS('use'); useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId); masker.appendChild(useElement); this.globalData.defs.appendChild(masker); if (!featureSupport.maskType && matteType === 1) { masker.setAttribute('mask-type', 'luminance'); filId = createElementID(); fil = filtersFactory.createFilter(filId); this.globalData.defs.appendChild(fil); fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); gg = createNS('g'); gg.appendChild(useElement); masker.appendChild(gg); gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')'); } } else if (matteType === 2) { var maskGroup = createNS('mask'); maskGroup.setAttribute('id', id); maskGroup.setAttribute('mask-type', 'alpha'); var maskGrouper = createNS('g'); maskGroup.appendChild(maskGrouper); filId = createElementID(); fil = filtersFactory.createFilter(filId); /// / var feCTr = createNS('feComponentTransfer'); feCTr.setAttribute('in', 'SourceGraphic'); fil.appendChild(feCTr); var feFunc = createNS('feFuncA'); feFunc.setAttribute('type', 'table'); feFunc.setAttribute('tableValues', '1.0 0.0'); feCTr.appendChild(feFunc); /// / this.globalData.defs.appendChild(fil); var alphaRect = createNS('rect'); alphaRect.setAttribute('width', this.comp.data.w); alphaRect.setAttribute('height', this.comp.data.h); alphaRect.setAttribute('x', '0'); alphaRect.setAttribute('y', '0'); alphaRect.setAttribute('fill', '#ffffff'); alphaRect.setAttribute('opacity', '0'); maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')'); maskGrouper.appendChild(alphaRect); useElement = createNS('use'); useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId); maskGrouper.appendChild(useElement); if (!featureSupport.maskType) { maskGroup.setAttribute('mask-type', 'luminance'); fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); gg = createNS('g'); maskGrouper.appendChild(alphaRect); gg.appendChild(this.layerElement); maskGrouper.appendChild(gg); } this.globalData.defs.appendChild(maskGroup); } this.matteMasks[matteType] = id; } return this.matteMasks[matteType]; }, setMatte: function setMatte(id) { if (!this.matteElement) { return; } this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')'); } }; /** * @file * Handles AE's layer parenting property. * */ function HierarchyElement() {} HierarchyElement.prototype = { /** * @function * Initializes hierarchy properties * */ initHierarchy: function initHierarchy() { // element's parent list this.hierarchy = []; // if element is parent of another layer _isParent will be true this._isParent = false; this.checkParenting(); }, /** * @function * Sets layer's hierarchy. * @param {array} hierarch * layer's parent list * */ setHierarchy: function setHierarchy(hierarchy) { this.hierarchy = hierarchy; }, /** * @function * Sets layer as parent. * */ setAsParent: function setAsParent() { this._isParent = true; }, /** * @function * Searches layer's parenting chain * */ checkParenting: function checkParenting() { if (this.data.parent !== undefined) { this.comp.buildElementParenting(this, this.data.parent, []); } } }; function RenderableDOMElement() {} (function () { var _prototype = { initElement: function initElement(data, globalData, comp) { this.initFrame(); this.initBaseData(data, globalData, comp); this.initTransform(data, globalData, comp); this.initHierarchy(); this.initRenderable(); this.initRendererElement(); this.createContainerElements(); this.createRenderableComponents(); this.createContent(); this.hide(); }, hide: function hide() { // console.log('HIDE', this); if (!this.hidden && (!this.isInRange || this.isTransparent)) { var elem = this.baseElement || this.layerElement; elem.style.display = 'none'; this.hidden = true; } }, show: function show() { // console.log('SHOW', this); if (this.isInRange && !this.isTransparent) { if (!this.data.hd) { var elem = this.baseElement || this.layerElement; elem.style.display = 'block'; } this.hidden = false; this._isFirstFrame = true; } }, renderFrame: function renderFrame() { // If it is exported as hidden (data.hd === true) no need to render // If it is not visible no need to render if (this.data.hd || this.hidden) { return; } this.renderTransform(); this.renderRenderable(); this.renderLocalTransform(); this.renderElement(); this.renderInnerContent(); if (this._isFirstFrame) { this._isFirstFrame = false; } }, renderInnerContent: function renderInnerContent() {}, prepareFrame: function prepareFrame(num) { this._mdf = false; this.prepareRenderableFrame(num); this.prepareProperties(num, this.isInRange); this.checkTransparency(); }, destroy: function destroy() { this.innerElem = null; this.destroyBaseElement(); } }; extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement); })(); function IImageElement(data, globalData, comp) { this.assetData = globalData.getAssetData(data.refId); if (this.assetData && this.assetData.sid) { this.assetData = globalData.slotManager.getProp(this.assetData); } this.initElement(data, globalData, comp); this.sourceRect = { top: 0, left: 0, width: this.assetData.w, height: this.assetData.h }; } extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement); IImageElement.prototype.createContent = function () { var assetPath = this.globalData.getAssetsPath(this.assetData); this.innerElem = createNS('image'); this.innerElem.setAttribute('width', this.assetData.w + 'px'); this.innerElem.setAttribute('height', this.assetData.h + 'px'); this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio); this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath); this.layerElement.appendChild(this.innerElem); }; IImageElement.prototype.sourceRectAtTime = function () { return this.sourceRect; }; function ProcessedElement(element, position) { this.elem = element; this.pos = position; } function IShapeElement() {} IShapeElement.prototype = { addShapeToModifiers: function addShapeToModifiers(data) { var i; var len = this.shapeModifiers.length; for (i = 0; i < len; i += 1) { this.shapeModifiers[i].addShape(data); } }, isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) { var i = 0; var len = this.shapeModifiers.length; while (i < len) { if (this.shapeModifiers[i].isAnimatedWithShape(data)) { return true; } } return false; }, renderModifiers: function renderModifiers() { if (!this.shapeModifiers.length) { return; } var i; var len = this.shapes.length; for (i = 0; i < len; i += 1) { this.shapes[i].sh.reset(); } len = this.shapeModifiers.length; var shouldBreakProcess; for (i = len - 1; i >= 0; i -= 1) { shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice // TODO: find a better solution for this if (shouldBreakProcess) { break; } } }, searchProcessedElement: function searchProcessedElement(elem) { var elements = this.processedElements; var i = 0; var len = elements.length; while (i < len) { if (elements[i].elem === elem) { return elements[i].pos; } i += 1; } return 0; }, addProcessedElement: function addProcessedElement(elem, pos) { var elements = this.processedElements; var i = elements.length; while (i) { i -= 1; if (elements[i].elem === elem) { elements[i].pos = pos; return; } } elements.push(new ProcessedElement(elem, pos)); }, prepareFrame: function prepareFrame(num) { this.prepareRenderableFrame(num); this.prepareProperties(num, this.isInRange); } }; var lineCapEnum = { 1: 'butt', 2: 'round', 3: 'square' }; var lineJoinEnum = { 1: 'miter', 2: 'round', 3: 'bevel' }; function SVGShapeData(transformers, level, shape) { this.caches = []; this.styles = []; this.transformers = transformers; this.lStr = ''; this.sh = shape; this.lvl = level; // TODO find if there are some cases where _isAnimated can be false. // For now, since shapes add up with other shapes. They have to be calculated every time. // One way of finding out is checking if all styles associated to this shape depend only of this shape this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated var i = 0; var len = transformers.length; while (i < len) { if (transformers[i].mProps.dynamicProperties.length) { this._isAnimated = true; break; } i += 1; } } SVGShapeData.prototype.setAsAnimated = function () { this._isAnimated = true; }; function SVGStyleData(data, level) { this.data = data; this.type = data.ty; this.d = ''; this.lvl = level; this._mdf = false; this.closed = data.hd === true; this.pElem = createNS('path'); this.msElem = null; } SVGStyleData.prototype.reset = function () { this.d = ''; this._mdf = false; }; function DashProperty(elem, data, renderer, container) { this.elem = elem; this.frameId = -1; this.dataProps = createSizedArray(data.length); this.renderer = renderer; this.k = false; this.dashStr = ''; this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0); this.dashoffset = createTypedArray('float32', 1); this.initDynamicPropertyContainer(container); var i; var len = data.length || 0; var prop; for (i = 0; i < len; i += 1) { prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this); this.k = prop.k || this.k; this.dataProps[i] = { n: data[i].n, p: prop }; } if (!this.k) { this.getValue(true); } this._isAnimated = this.k; } DashProperty.prototype.getValue = function (forceRender) { if (this.elem.globalData.frameId === this.frameId && !forceRender) { return; } this.frameId = this.elem.globalData.frameId; this.iterateDynamicProperties(); this._mdf = this._mdf || forceRender; if (this._mdf) { var i = 0; var len = this.dataProps.length; if (this.renderer === 'svg') { this.dashStr = ''; } for (i = 0; i < len; i += 1) { if (this.dataProps[i].n !== 'o') { if (this.renderer === 'svg') { this.dashStr += ' ' + this.dataProps[i].p.v; } else { this.dashArray[i] = this.dataProps[i].p.v; } } else { this.dashoffset[0] = this.dataProps[i].p.v; } } } }; extendPrototype([DynamicPropertyContainer], DashProperty); function SVGStrokeStyleData(elem, data, styleOb) { this.initDynamicPropertyContainer(elem); this.getValue = this.iterateDynamicProperties; this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this); this.w = PropertyFactory.getProp(elem, data.w, 0, null, this); this.d = new DashProperty(elem, data.d || {}, 'svg', this); this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this); this.style = styleOb; this._isAnimated = !!this._isAnimated; } extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData); function SVGFillStyleData(elem, data, styleOb) { this.initDynamicPropertyContainer(elem); this.getValue = this.iterateDynamicProperties; this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this); this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this); this.style = styleOb; } extendPrototype([DynamicPropertyContainer], SVGFillStyleData); function SVGNoStyleData(elem, data, styleOb) { this.initDynamicPropertyContainer(elem); this.getValue = this.iterateDynamicProperties; this.style = styleOb; } extendPrototype([DynamicPropertyContainer], SVGNoStyleData); function GradientProperty(elem, data, container) { this.data = data; this.c = createTypedArray('uint8c', data.p * 4); var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4; this.o = createTypedArray('float32', cLength); this._cmdf = false; this._omdf = false; this._collapsable = this.checkCollapsable(); this._hasOpacity = cLength; this.initDynamicPropertyContainer(container); this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this); this.k = this.prop.k; this.getValue(true); } GradientProperty.prototype.comparePoints = function (values, points) { var i = 0; var len = this.o.length / 2; var diff; while (i < len) { diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]); if (diff > 0.01) { return false; } i += 1; } return true; }; GradientProperty.prototype.checkCollapsable = function () { if (this.o.length / 2 !== this.c.length / 4) { return false; } if (this.data.k.k[0].s) { var i = 0; var len = this.data.k.k.length; while (i < len) { if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) { return false; } i += 1; } } else if (!this.comparePoints(this.data.k.k, this.data.p)) { return false; } return true; }; GradientProperty.prototype.getValue = function (forceRender) { this.prop.getValue(); this._mdf = false; this._cmdf = false; this._omdf = false; if (this.prop._mdf || forceRender) { var i; var len = this.data.p * 4; var mult; var val; for (i = 0; i < len; i += 1) { mult = i % 4 === 0 ? 100 : 255; val = Math.round(this.prop.v[i] * mult); if (this.c[i] !== val) { this.c[i] = val; this._cmdf = !forceRender; } } if (this.o.length) { len = this.prop.v.length; for (i = this.data.p * 4; i < len; i += 1) { mult = i % 2 === 0 ? 100 : 1; val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i]; if (this.o[i - this.data.p * 4] !== val) { this.o[i - this.data.p * 4] = val; this._omdf = !forceRender; } } } this._mdf = !forceRender; } }; extendPrototype([DynamicPropertyContainer], GradientProperty); function SVGGradientFillStyleData(elem, data, styleOb) { this.initDynamicPropertyContainer(elem); this.getValue = this.iterateDynamicProperties; this.initGradientData(elem, data, styleOb); } SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) { this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this); this.s = PropertyFactory.getProp(elem, data.s, 1, null, this); this.e = PropertyFactory.getProp(elem, data.e, 1, null, this); this.h = PropertyFactory.getProp(elem, data.h || { k: 0 }, 0, 0.01, this); this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 0, degToRads, this); this.g = new GradientProperty(elem, data.g, this); this.style = styleOb; this.stops = []; this.setGradientData(styleOb.pElem, data); this.setGradientOpacity(data, styleOb); this._isAnimated = !!this._isAnimated; }; SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) { var gradientId = createElementID(); var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient'); gfill.setAttribute('id', gradientId); gfill.setAttribute('spreadMethod', 'pad'); gfill.setAttribute('gradientUnits', 'userSpaceOnUse'); var stops = []; var stop; var j; var jLen; jLen = data.g.p * 4; for (j = 0; j < jLen; j += 4) { stop = createNS('stop'); gfill.appendChild(stop); stops.push(stop); } pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')'); this.gf = gfill; this.cst = stops; }; SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) { if (this.g._hasOpacity && !this.g._collapsable) { var stop; var j; var jLen; var mask = createNS('mask'); var maskElement = createNS('path'); mask.appendChild(maskElement); var opacityId = createElementID(); var maskId = createElementID(); mask.setAttribute('id', maskId); var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient'); opFill.setAttribute('id', opacityId); opFill.setAttribute('spreadMethod', 'pad'); opFill.setAttribute('gradientUnits', 'userSpaceOnUse'); jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length; var stops = this.stops; for (j = data.g.p * 4; j < jLen; j += 2) { stop = createNS('stop'); stop.setAttribute('stop-color', 'rgb(255,255,255)'); opFill.appendChild(stop); stops.push(stop); } maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')'); if (data.ty === 'gs') { maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]); maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]); if (data.lj === 1) { maskElement.setAttribute('stroke-miterlimit', data.ml); } } this.of = opFill; this.ms = mask; this.ost = stops; this.maskId = maskId; styleOb.msElem = maskElement; } }; extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData); function SVGGradientStrokeStyleData(elem, data, styleOb) { this.initDynamicPropertyContainer(elem); this.getValue = this.iterateDynamicProperties; this.w = PropertyFactory.getProp(elem, data.w, 0, null, this); this.d = new DashProperty(elem, data.d || {}, 'svg', this); this.initGradientData(elem, data, styleOb); this._isAnimated = !!this._isAnimated; } extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData); function ShapeGroupData() { this.it = []; this.prevViewData = []; this.gr = createNS('g'); } function SVGTransformData(mProps, op, container) { this.transform = { mProps: mProps, op: op, container: container }; this.elements = []; this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length; } var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) { if (length === 0) { return ''; } var _o = pathNodes.o; var _i = pathNodes.i; var _v = pathNodes.v; var i; var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]); for (i = 1; i < length; i += 1) { 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]); } if (closed && length) { 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]); shapeString += 'z'; } return shapeString; }; var SVGElementsRenderer = function () { var _identityMatrix = new Matrix(); var _matrixHelper = new Matrix(); var ob = { createRenderFunction: createRenderFunction }; function createRenderFunction(data) { switch (data.ty) { case 'fl': return renderFill; case 'gf': return renderGradient; case 'gs': return renderGradientStroke; case 'st': return renderStroke; case 'sh': case 'el': case 'rc': case 'sr': return renderPath; case 'tr': return renderContentTransform; case 'no': return renderNoop; default: return null; } } function renderContentTransform(styleData, itemData, isFirstFrame) { if (isFirstFrame || itemData.transform.op._mdf) { itemData.transform.container.setAttribute('opacity', itemData.transform.op.v); } if (isFirstFrame || itemData.transform.mProps._mdf) { itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS()); } } function renderNoop() {} function renderPath(styleData, itemData, isFirstFrame) { var j; var jLen; var pathStringTransformed; var redraw; var pathNodes; var l; var lLen = itemData.styles.length; var lvl = itemData.lvl; var paths; var mat; var iterations; var k; for (l = 0; l < lLen; l += 1) { redraw = itemData.sh._mdf || isFirstFrame; if (itemData.styles[l].lvl < lvl) { mat = _matrixHelper.reset(); iterations = lvl - itemData.styles[l].lvl; k = itemData.transformers.length - 1; while (!redraw && iterations > 0) { redraw = itemData.transformers[k].mProps._mdf || redraw; iterations -= 1; k -= 1; } if (redraw) { iterations = lvl - itemData.styles[l].lvl; k = itemData.transformers.length - 1; while (iterations > 0) { mat.multiply(itemData.transformers[k].mProps.v); iterations -= 1; k -= 1; } } } else { mat = _identityMatrix; } paths = itemData.sh.paths; jLen = paths._length; if (redraw) { pathStringTransformed = ''; for (j = 0; j < jLen; j += 1) { pathNodes = paths.shapes[j]; if (pathNodes && pathNodes._length) { pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat); } } itemData.caches[l] = pathStringTransformed; } else { pathStringTransformed = itemData.caches[l]; } itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed; itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf; } } function renderFill(styleData, itemData, isFirstFrame) { var styleElem = itemData.style; if (itemData.c._mdf || isFirstFrame) { styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'); } if (itemData.o._mdf || isFirstFrame) { styleElem.pElem.setAttribute('fill-opacity', itemData.o.v); } } function renderGradientStroke(styleData, itemData, isFirstFrame) { renderGradient(styleData, itemData, isFirstFrame); renderStroke(styleData, itemData, isFirstFrame); } function renderGradient(styleData, itemData, isFirstFrame) { var gfill = itemData.gf; var hasOpacity = itemData.g._hasOpacity; var pt1 = itemData.s.v; var pt2 = itemData.e.v; if (itemData.o._mdf || isFirstFrame) { var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity'; itemData.style.pElem.setAttribute(attr, itemData.o.v); } if (itemData.s._mdf || isFirstFrame) { var attr1 = styleData.t === 1 ? 'x1' : 'cx'; var attr2 = attr1 === 'x1' ? 'y1' : 'cy'; gfill.setAttribute(attr1, pt1[0]); gfill.setAttribute(attr2, pt1[1]); if (hasOpacity && !itemData.g._collapsable) { itemData.of.setAttribute(attr1, pt1[0]); itemData.of.setAttribute(attr2, pt1[1]); } } var stops; var i; var len; var stop; if (itemData.g._cmdf || isFirstFrame) { stops = itemData.cst; var cValues = itemData.g.c; len = stops.length; for (i = 0; i < len; i += 1) { stop = stops[i]; stop.setAttribute('offset', cValues[i * 4] + '%'); stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')'); } } if (hasOpacity && (itemData.g._omdf || isFirstFrame)) { var oValues = itemData.g.o; if (itemData.g._collapsable) { stops = itemData.cst; } else { stops = itemData.ost; } len = stops.length; for (i = 0; i < len; i += 1) { stop = stops[i]; if (!itemData.g._collapsable) { stop.setAttribute('offset', oValues[i * 2] + '%'); } stop.setAttribute('stop-opacity', oValues[i * 2 + 1]); } } if (styleData.t === 1) { if (itemData.e._mdf || isFirstFrame) { gfill.setAttribute('x2', pt2[0]); gfill.setAttribute('y2', pt2[1]); if (hasOpacity && !itemData.g._collapsable) { itemData.of.setAttribute('x2', pt2[0]); itemData.of.setAttribute('y2', pt2[1]); } } } else { var rad; if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) { rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); gfill.setAttribute('r', rad); if (hasOpacity && !itemData.g._collapsable) { itemData.of.setAttribute('r', rad); } } if (itemData.s._mdf || itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) { if (!rad) { rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); } var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); var percent = itemData.h.v; if (percent >= 1) { percent = 0.99; } else if (percent <= -1) { percent = -0.99; } var dist = rad * percent; var x = Math.cos(ang + itemData.a.v) * dist + pt1[0]; var y = Math.sin(ang + itemData.a.v) * dist + pt1[1]; gfill.setAttribute('fx', x); gfill.setAttribute('fy', y); if (hasOpacity && !itemData.g._collapsable) { itemData.of.setAttribute('fx', x); itemData.of.setAttribute('fy', y); } } // gfill.setAttribute('fy','200'); } } function renderStroke(styleData, itemData, isFirstFrame) { var styleElem = itemData.style; var d = itemData.d; if (d && (d._mdf || isFirstFrame) && d.dashStr) { styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr); styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]); } if (itemData.c && (itemData.c._mdf || isFirstFrame)) { styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'); } if (itemData.o._mdf || isFirstFrame) { styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v); } if (itemData.w._mdf || isFirstFrame) { styleElem.pElem.setAttribute('stroke-width', itemData.w.v); if (styleElem.msElem) { styleElem.msElem.setAttribute('stroke-width', itemData.w.v); } } } return ob; }(); function SVGShapeElement(data, globalData, comp) { // List of drawable elements this.shapes = []; // Full shape data this.shapesData = data.shapes; // List of styles that will be applied to shapes this.stylesList = []; // List of modifiers that will be applied to shapes this.shapeModifiers = []; // List of items in shape tree this.itemsData = []; // List of items in previous shape tree this.processedElements = []; // List of animated components this.animatedContents = []; 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. // List of elements that have been created this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties. } extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement); SVGShapeElement.prototype.initSecondaryElement = function () {}; SVGShapeElement.prototype.identityMatrix = new Matrix(); SVGShapeElement.prototype.buildExpressionInterface = function () {}; SVGShapeElement.prototype.createContent = function () { this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); this.filterUniqueShapes(); }; /* This method searches for multiple shapes that affect a single element and one of them is animated */ SVGShapeElement.prototype.filterUniqueShapes = function () { var i; var len = this.shapes.length; var shape; var j; var jLen = this.stylesList.length; var style; var tempShapes = []; var areAnimated = false; for (j = 0; j < jLen; j += 1) { style = this.stylesList[j]; areAnimated = false; tempShapes.length = 0; for (i = 0; i < len; i += 1) { shape = this.shapes[i]; if (shape.styles.indexOf(style) !== -1) { tempShapes.push(shape); areAnimated = shape._isAnimated || areAnimated; } } if (tempShapes.length > 1 && areAnimated) { this.setShapesAsAnimated(tempShapes); } } }; SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) { var i; var len = shapes.length; for (i = 0; i < len; i += 1) { shapes[i].setAsAnimated(); } }; SVGShapeElement.prototype.createStyleElement = function (data, level) { // TODO: prevent drawing of hidden styles var elementData; var styleOb = new SVGStyleData(data, level); var pathElement = styleOb.pElem; if (data.ty === 'st') { elementData = new SVGStrokeStyleData(this, data, styleOb); } else if (data.ty === 'fl') { elementData = new SVGFillStyleData(this, data, styleOb); } else if (data.ty === 'gf' || data.ty === 'gs') { var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData; elementData = new GradientConstructor(this, data, styleOb); this.globalData.defs.appendChild(elementData.gf); if (elementData.maskId) { this.globalData.defs.appendChild(elementData.ms); this.globalData.defs.appendChild(elementData.of); pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')'); } } else if (data.ty === 'no') { elementData = new SVGNoStyleData(this, data, styleOb); } if (data.ty === 'st' || data.ty === 'gs') { pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]); pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]); pathElement.setAttribute('fill-opacity', '0'); if (data.lj === 1) { pathElement.setAttribute('stroke-miterlimit', data.ml); } } if (data.r === 2) { pathElement.setAttribute('fill-rule', 'evenodd'); } if (data.ln) { pathElement.setAttribute('id', data.ln); } if (data.cl) { pathElement.setAttribute('class', data.cl); } if (data.bm) { pathElement.style['mix-blend-mode'] = getBlendMode(data.bm); } this.stylesList.push(styleOb); this.addToAnimatedContents(data, elementData); return elementData; }; SVGShapeElement.prototype.createGroupElement = function (data) { var elementData = new ShapeGroupData(); if (data.ln) { elementData.gr.setAttribute('id', data.ln); } if (data.cl) { elementData.gr.setAttribute('class', data.cl); } if (data.bm) { elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm); } return elementData; }; SVGShapeElement.prototype.createTransformElement = function (data, container) { var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this); var elementData = new SVGTransformData(transformProperty, transformProperty.o, container); this.addToAnimatedContents(data, elementData); return elementData; }; SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) { var ty = 4; if (data.ty === 'rc') { ty = 5; } else if (data.ty === 'el') { ty = 6; } else if (data.ty === 'sr') { ty = 7; } var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this); var elementData = new SVGShapeData(ownTransformers, level, shapeProperty); this.shapes.push(elementData); this.addShapeToModifiers(elementData); this.addToAnimatedContents(data, elementData); return elementData; }; SVGShapeElement.prototype.addToAnimatedContents = function (data, element) { var i = 0; var len = this.animatedContents.length; while (i < len) { if (this.animatedContents[i].element === element) { return; } i += 1; } this.animatedContents.push({ fn: SVGElementsRenderer.createRenderFunction(data), element: element, data: data }); }; SVGShapeElement.prototype.setElementStyles = function (elementData) { var arr = elementData.styles; var j; var jLen = this.stylesList.length; for (j = 0; j < jLen; j += 1) { if (arr.indexOf(this.stylesList[j]) === -1 && !this.stylesList[j].closed) { arr.push(this.stylesList[j]); } } }; SVGShapeElement.prototype.reloadShapes = function () { this._isFirstFrame = true; var i; var len = this.itemsData.length; for (i = 0; i < len; i += 1) { this.prevViewData[i] = this.itemsData[i]; } this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); this.filterUniqueShapes(); len = this.dynamicProperties.length; for (i = 0; i < len; i += 1) { this.dynamicProperties[i].getValue(); } this.renderModifiers(); }; SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) { var ownTransformers = [].concat(transformers); var i; var len = arr.length - 1; var j; var jLen; var ownStyles = []; var ownModifiers = []; var currentTransform; var modifier; var processedPos; for (i = len; i >= 0; i -= 1) { processedPos = this.searchProcessedElement(arr[i]); if (!processedPos) { arr[i]._render = render; } else { itemsData[i] = prevViewData[processedPos - 1]; } if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') { if (!processedPos) { itemsData[i] = this.createStyleElement(arr[i], level); } else { itemsData[i].style.closed = arr[i].hd; } if (arr[i]._render) { if (itemsData[i].style.pElem.parentNode !== container) { container.appendChild(itemsData[i].style.pElem); } } ownStyles.push(itemsData[i].style); } else if (arr[i].ty === 'gr') { if (!processedPos) { itemsData[i] = this.createGroupElement(arr[i]); } else { jLen = itemsData[i].it.length; for (j = 0; j < jLen; j += 1) { itemsData[i].prevViewData[j] = itemsData[i].it[j]; } } this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render); if (arr[i]._render) { if (itemsData[i].gr.parentNode !== container) { container.appendChild(itemsData[i].gr); } } } else if (arr[i].ty === 'tr') { if (!processedPos) { itemsData[i] = this.createTransformElement(arr[i], container); } currentTransform = itemsData[i].transform; ownTransformers.push(currentTransform); } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') { if (!processedPos) { itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level); } this.setElementStyles(itemsData[i]); } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') { if (!processedPos) { modifier = ShapeModifiers.getModifier(arr[i].ty); modifier.init(this, arr[i]); itemsData[i] = modifier; this.shapeModifiers.push(modifier); } else { modifier = itemsData[i]; modifier.closed = false; } ownModifiers.push(modifier); } else if (arr[i].ty === 'rp') { if (!processedPos) { modifier = ShapeModifiers.getModifier(arr[i].ty); itemsData[i] = modifier; modifier.init(this, arr, i, itemsData); this.shapeModifiers.push(modifier); render = false; } else { modifier = itemsData[i]; modifier.closed = true; } ownModifiers.push(modifier); } this.addProcessedElement(arr[i], i + 1); } len = ownStyles.length; for (i = 0; i < len; i += 1) { ownStyles[i].closed = true; } len = ownModifiers.length; for (i = 0; i < len; i += 1) { ownModifiers[i].closed = true; } }; SVGShapeElement.prototype.renderInnerContent = function () { this.renderModifiers(); var i; var len = this.stylesList.length; for (i = 0; i < len; i += 1) { this.stylesList[i].reset(); } this.renderShape(); for (i = 0; i < len; i += 1) { if (this.stylesList[i]._mdf || this._isFirstFrame) { if (this.stylesList[i].msElem) { this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers this.stylesList[i].d = 'M0 0' + this.stylesList[i].d; } this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0'); } } }; SVGShapeElement.prototype.renderShape = function () { var i; var len = this.animatedContents.length; var animatedContent; for (i = 0; i < len; i += 1) { animatedContent = this.animatedContents[i]; if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) { animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame); } } }; SVGShapeElement.prototype.destroy = function () { this.destroyBaseElement(); this.shapesData = null; this.itemsData = null; }; function LetterProps(o, sw, sc, fc, m, p) { this.o = o; this.sw = sw; this.sc = sc; this.fc = fc; this.m = m; this.p = p; this._mdf = { o: true, sw: !!sw, sc: !!sc, fc: !!fc, m: true, p: true }; } LetterProps.prototype.update = function (o, sw, sc, fc, m, p) { this._mdf.o = false; this._mdf.sw = false; this._mdf.sc = false; this._mdf.fc = false; this._mdf.m = false; this._mdf.p = false; var updated = false; if (this.o !== o) { this.o = o; this._mdf.o = true; updated = true; } if (this.sw !== sw) { this.sw = sw; this._mdf.sw = true; updated = true; } if (this.sc !== sc) { this.sc = sc; this._mdf.sc = true; updated = true; } if (this.fc !== fc) { this.fc = fc; this._mdf.fc = true; updated = true; } if (this.m !== m) { this.m = m; this._mdf.m = true; updated = true; } 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])) { this.p = p; this._mdf.p = true; updated = true; } return updated; }; function TextProperty(elem, data) { this._frameId = initialDefaultFrame; this.pv = ''; this.v = ''; this.kf = false; this._isFirstFrame = true; this._mdf = false; if (data.d && data.d.sid) { data.d = elem.globalData.slotManager.getProp(data.d); } this.data = data; this.elem = elem; this.comp = this.elem.comp; this.keysIndex = 0; this.canResize = false; this.minimumFontSize = 1; this.effectsSequence = []; this.currentData = { ascent: 0, boxWidth: this.defaultBoxWidth, f: '', fStyle: '', fWeight: '', fc: '', j: '', justifyOffset: '', l: [], lh: 0, lineWidths: [], ls: '', of: '', s: '', sc: '', sw: 0, t: 0, tr: 0, sz: 0, ps: null, fillColorAnim: false, strokeColorAnim: false, strokeWidthAnim: false, yOffset: 0, finalSize: 0, finalText: [], finalLineHeight: 0, __complete: false }; this.copyData(this.currentData, this.data.d.k[0].s); if (!this.searchProperty()) { this.completeTextData(this.currentData); } } TextProperty.prototype.defaultBoxWidth = [0, 0]; TextProperty.prototype.copyData = function (obj, data) { for (var s in data) { if (Object.prototype.hasOwnProperty.call(data, s)) { obj[s] = data[s]; } } return obj; }; TextProperty.prototype.setCurrentData = function (data) { if (!data.__complete) { this.completeTextData(data); } this.currentData = data; this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth; this._mdf = true; }; TextProperty.prototype.searchProperty = function () { return this.searchKeyframes(); }; TextProperty.prototype.searchKeyframes = function () { this.kf = this.data.d.k.length > 1; if (this.kf) { this.addEffect(this.getKeyframeValue.bind(this)); } return this.kf; }; TextProperty.prototype.addEffect = function (effectFunction) { this.effectsSequence.push(effectFunction); this.elem.addDynamicProperty(this); }; TextProperty.prototype.getValue = function (_finalValue) { if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) { return; } this.currentData.t = this.data.d.k[this.keysIndex].s.t; var currentValue = this.currentData; var currentIndex = this.keysIndex; if (this.lock) { this.setCurrentData(this.currentData); return; } this.lock = true; this._mdf = false; var i; var len = this.effectsSequence.length; var finalValue = _finalValue || this.data.d.k[this.keysIndex].s; for (i = 0; i < len; i += 1) { // Checking if index changed to prevent creating a new object every time the expression updates. if (currentIndex !== this.keysIndex) { finalValue = this.effectsSequence[i](finalValue, finalValue.t); } else { finalValue = this.effectsSequence[i](this.currentData, finalValue.t); } } if (currentValue !== finalValue) { this.setCurrentData(finalValue); } this.v = this.currentData; this.pv = this.v; this.lock = false; this.frameId = this.elem.globalData.frameId; }; TextProperty.prototype.getKeyframeValue = function () { var textKeys = this.data.d.k; var frameNum = this.elem.comp.renderedFrame; var i = 0; var len = textKeys.length; while (i <= len - 1) { if (i === len - 1 || textKeys[i + 1].t > frameNum) { break; } i += 1; } if (this.keysIndex !== i) { this.keysIndex = i; } return this.data.d.k[this.keysIndex].s; }; TextProperty.prototype.buildFinalText = function (text) { var charactersArray = []; var i = 0; var len = text.length; var charCode; var secondCharCode; var shouldCombine = false; var shouldCombineNext = false; var currentChars = ''; while (i < len) { shouldCombine = shouldCombineNext; shouldCombineNext = false; charCode = text.charCodeAt(i); currentChars = text.charAt(i); if (FontManager.isCombinedCharacter(charCode)) { shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate) } else if (charCode >= 0xD800 && charCode <= 0xDBFF) { if (FontManager.isRegionalFlag(text, i)) { currentChars = text.substr(i, 14); } else { secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate) if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) { if (FontManager.isModifier(charCode, secondCharCode)) { currentChars = text.substr(i, 2); shouldCombine = true; } else if (FontManager.isFlagEmoji(text.substr(i, 4))) { currentChars = text.substr(i, 4); } else { currentChars = text.substr(i, 2); } } } } else if (charCode > 0xDBFF) { secondCharCode = text.charCodeAt(i + 1); if (FontManager.isVariationSelector(charCode)) { shouldCombine = true; } } else if (FontManager.isZeroWidthJoiner(charCode)) { shouldCombine = true; shouldCombineNext = true; } if (shouldCombine) { charactersArray[charactersArray.length - 1] += currentChars; shouldCombine = false; } else { charactersArray.push(currentChars); } i += currentChars.length; } return charactersArray; }; TextProperty.prototype.completeTextData = function (documentData) { documentData.__complete = true; var fontManager = this.elem.globalData.fontManager; var data = this.data; var letters = []; var i; var len; var newLineFlag; var index = 0; var val; var anchorGrouping = data.m.g; var currentSize = 0; var currentPos = 0; var currentLine = 0; var lineWidths = []; var lineWidth = 0; var maxLineWidth = 0; var j; var jLen; var fontData = fontManager.getFontByName(documentData.f); var charData; var cLength = 0; var fontProps = getFontProperties(fontData); documentData.fWeight = fontProps.weight; documentData.fStyle = fontProps.style; documentData.finalSize = documentData.s; documentData.finalText = this.buildFinalText(documentData.t); len = documentData.finalText.length; documentData.finalLineHeight = documentData.lh; var trackingOffset = documentData.tr / 1000 * documentData.finalSize; var charCode; if (documentData.sz) { var flag = true; var boxWidth = documentData.sz[0]; var boxHeight = documentData.sz[1]; var currentHeight; var finalText; while (flag) { finalText = this.buildFinalText(documentData.t); currentHeight = 0; lineWidth = 0; len = finalText.length; trackingOffset = documentData.tr / 1000 * documentData.finalSize; var lastSpaceIndex = -1; for (i = 0; i < len; i += 1) { charCode = finalText[i].charCodeAt(0); newLineFlag = false; if (finalText[i] === ' ') { lastSpaceIndex = i; } else if (charCode === 13 || charCode === 3) { lineWidth = 0; newLineFlag = true; currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; } if (fontManager.chars) { charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily); cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; } else { // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily; cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize); } if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') { if (lastSpaceIndex === -1) { len += 1; } else { i = lastSpaceIndex; } currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\r'); // finalText = finalText.substr(0,i) + "\r" + finalText.substr(i === lastSpaceIndex ? i + 1 : i); lastSpaceIndex = -1; lineWidth = 0; } else { lineWidth += cLength; lineWidth += trackingOffset; } } currentHeight += fontData.ascent * documentData.finalSize / 100; if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) { documentData.finalSize -= 1; documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s; } else { documentData.finalText = finalText; len = documentData.finalText.length; flag = false; } } } lineWidth = -trackingOffset; cLength = 0; var uncollapsedSpaces = 0; var currentChar; for (i = 0; i < len; i += 1) { newLineFlag = false; currentChar = documentData.finalText[i]; charCode = currentChar.charCodeAt(0); if (charCode === 13 || charCode === 3) { uncollapsedSpaces = 0; lineWidths.push(lineWidth); maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; lineWidth = -2 * trackingOffset; val = ''; newLineFlag = true; currentLine += 1; } else { val = currentChar; } if (fontManager.chars) { charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily); cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; } else { // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize); // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily; cLength = fontManager.measureText(val, documentData.f, documentData.finalSize); } // if (currentChar === ' ') { uncollapsedSpaces += cLength + trackingOffset; } else { lineWidth += cLength + trackingOffset + uncollapsedSpaces; uncollapsedSpaces = 0; } letters.push({ l: cLength, an: cLength, add: currentSize, n: newLineFlag, anIndexes: [], val: val, line: currentLine, animatorJustifyOffset: 0 }); if (anchorGrouping == 2) { // eslint-disable-line eqeqeq currentSize += cLength; if (val === '' || val === ' ' || i === len - 1) { if (val === '' || val === ' ') { currentSize -= cLength; } while (currentPos <= i) { letters[currentPos].an = currentSize; letters[currentPos].ind = index; letters[currentPos].extra = cLength; currentPos += 1; } index += 1; currentSize = 0; } } else if (anchorGrouping == 3) { // eslint-disable-line eqeqeq currentSize += cLength; if (val === '' || i === len - 1) { if (val === '') { currentSize -= cLength; } while (currentPos <= i) { letters[currentPos].an = currentSize; letters[currentPos].ind = index; letters[currentPos].extra = cLength; currentPos += 1; } currentSize = 0; index += 1; } } else { letters[index].ind = index; letters[index].extra = 0; index += 1; } } documentData.l = letters; maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; lineWidths.push(lineWidth); if (documentData.sz) { documentData.boxWidth = documentData.sz[0]; documentData.justifyOffset = 0; } else { documentData.boxWidth = maxLineWidth; switch (documentData.j) { case 1: documentData.justifyOffset = -documentData.boxWidth; break; case 2: documentData.justifyOffset = -documentData.boxWidth / 2; break; default: documentData.justifyOffset = 0; } } documentData.lineWidths = lineWidths; var animators = data.a; var animatorData; var letterData; jLen = animators.length; var based; var ind; var indexes = []; for (j = 0; j < jLen; j += 1) { animatorData = animators[j]; if (animatorData.a.sc) { documentData.strokeColorAnim = true; } if (animatorData.a.sw) { documentData.strokeWidthAnim = true; } if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) { documentData.fillColorAnim = true; } ind = 0; based = animatorData.s.b; for (i = 0; i < len; i += 1) { letterData = letters[i]; letterData.anIndexes[j] = ind; 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)) { // eslint-disable-line eqeqeq if (animatorData.s.rn === 1) { indexes.push(ind); } ind += 1; } } data.a[j].s.totalChars = ind; var currentInd = -1; var newInd; if (animatorData.s.rn === 1) { for (i = 0; i < len; i += 1) { letterData = letters[i]; if (currentInd != letterData.anIndexes[j]) { // eslint-disable-line eqeqeq currentInd = letterData.anIndexes[j]; newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0]; } letterData.anIndexes[j] = newInd; } } } documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2; documentData.ls = documentData.ls || 0; documentData.ascent = fontData.ascent * documentData.finalSize / 100; }; TextProperty.prototype.updateDocumentData = function (newData, index) { index = index === undefined ? this.keysIndex : index; var dData = this.copyData({}, this.data.d.k[index].s); dData = this.copyData(dData, newData); this.data.d.k[index].s = dData; this.recalculate(index); this.setCurrentData(dData); this.elem.addDynamicProperty(this); }; TextProperty.prototype.recalculate = function (index) { var dData = this.data.d.k[index].s; dData.__complete = false; this.keysIndex = 0; this._isFirstFrame = true; this.getValue(dData); }; TextProperty.prototype.canResizeFont = function (_canResize) { this.canResize = _canResize; this.recalculate(this.keysIndex); this.elem.addDynamicProperty(this); }; TextProperty.prototype.setMinimumFontSize = function (_fontValue) { this.minimumFontSize = Math.floor(_fontValue) || 1; this.recalculate(this.keysIndex); this.elem.addDynamicProperty(this); }; var TextSelectorProp = function () { var max = Math.max; var min = Math.min; var floor = Math.floor; function TextSelectorPropFactory(elem, data) { this._currentTextLength = -1; this.k = false; this.data = data; this.elem = elem; this.comp = elem.comp; this.finalS = 0; this.finalE = 0; this.initDynamicPropertyContainer(elem); this.s = PropertyFactory.getProp(elem, data.s || { k: 0 }, 0, 0, this); if ('e' in data) { this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this); } else { this.e = { v: 100 }; } this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this); this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this); this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this); this.sm = PropertyFactory.getProp(elem, data.sm || { k: 100 }, 0, 0, this); this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this); if (!this.dynamicProperties.length) { this.getValue(); } } TextSelectorPropFactory.prototype = { getMult: function getMult(ind) { if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) { this.getValue(); } var x1 = 0; var y1 = 0; var x2 = 1; var y2 = 1; if (this.ne.v > 0) { x1 = this.ne.v / 100.0; } else { y1 = -this.ne.v / 100.0; } if (this.xe.v > 0) { x2 = 1.0 - this.xe.v / 100.0; } else { y2 = 1.0 + this.xe.v / 100.0; } var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get; var mult = 0; var s = this.finalS; var e = this.finalE; var type = this.data.sh; if (type === 2) { if (e === s) { mult = ind >= e ? 1 : 0; } else { mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); } mult = easer(mult); } else if (type === 3) { if (e === s) { mult = ind >= e ? 0 : 1; } else { mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); } mult = easer(mult); } else if (type === 4) { if (e === s) { mult = 0; } else { mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); if (mult < 0.5) { mult *= 2; } else { mult = 1 - 2 * (mult - 0.5); } } mult = easer(mult); } else if (type === 5) { if (e === s) { mult = 0; } else { var tot = e - s; /* ind += 0.5; mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */ ind = min(max(0, ind + 0.5 - s), e - s); var x = -tot / 2 + ind; var a = tot / 2; mult = Math.sqrt(1 - x * x / (a * a)); } mult = easer(mult); } else if (type === 6) { if (e === s) { mult = 0; } else { ind = min(max(0, ind + 0.5 - s), e - s); mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line } mult = easer(mult); } else { if (ind >= floor(s)) { if (ind - s < 0) { mult = max(0, min(min(e, 1) - (s - ind), 1)); } else { mult = max(0, min(e - ind, 1)); } } mult = easer(mult); } // Smoothness implementation. // The smoothness represents a reduced range of the original [0; 1] range. // if smoothness is 25%, the new range will be [0.375; 0.625] // Steps are: // - find the lower value of the new range (threshold) // - if multiplier is smaller than that value, floor it to 0 // - if it is larger, // - subtract the threshold // - divide it by the smoothness (this will return the range to [0; 1]) // Note: If it doesn't work on some scenarios, consider applying it before the easer. if (this.sm.v !== 100) { var smoothness = this.sm.v * 0.01; if (smoothness === 0) { smoothness = 0.00000001; } var threshold = 0.5 - smoothness * 0.5; if (mult < threshold) { mult = 0; } else { mult = (mult - threshold) / smoothness; if (mult > 1) { mult = 1; } } } return mult * this.a.v; }, getValue: function getValue(newCharsFlag) { this.iterateDynamicProperties(); this._mdf = newCharsFlag || this._mdf; this._currentTextLength = this.elem.textProperty.currentData.l.length || 0; if (newCharsFlag && this.data.r === 2) { this.e.v = this._currentTextLength; } var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars; var o = this.o.v / divisor; var s = this.s.v / divisor + o; var e = this.e.v / divisor + o; if (s > e) { var _s = s; s = e; e = _s; } this.finalS = s; this.finalE = e; } }; extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory); function getTextSelectorProp(elem, data, arr) { return new TextSelectorPropFactory(elem, data, arr); } return { getTextSelectorProp: getTextSelectorProp }; }(); function TextAnimatorDataProperty(elem, animatorProps, container) { var defaultData = { propType: false }; var getProp = PropertyFactory.getProp; var textAnimatorAnimatables = animatorProps.a; this.a = { r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData, rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData, ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData, sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData, sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData, s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData, a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData, o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData, p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData, sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData, sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData, fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData, fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData, fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData, fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData, t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData }; this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container); this.s.t = animatorProps.s.t; } function TextAnimatorProperty(textData, renderType, elem) { this._isFirstFrame = true; this._hasMaskedPath = false; this._frameId = -1; this._textData = textData; this._renderType = renderType; this._elem = elem; this._animatorsData = createSizedArray(this._textData.a.length); this._pathData = {}; this._moreOptions = { alignment: {} }; this.renderedLetters = []; this.lettersChangedFlag = false; this.initDynamicPropertyContainer(elem); } TextAnimatorProperty.prototype.searchProperties = function () { var i; var len = this._textData.a.length; var animatorProps; var getProp = PropertyFactory.getProp; for (i = 0; i < len; i += 1) { animatorProps = this._textData.a[i]; this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this); } if (this._textData.p && 'm' in this._textData.p) { this._pathData = { a: getProp(this._elem, this._textData.p.a, 0, 0, this), f: getProp(this._elem, this._textData.p.f, 0, 0, this), l: getProp(this._elem, this._textData.p.l, 0, 0, this), r: getProp(this._elem, this._textData.p.r, 0, 0, this), p: getProp(this._elem, this._textData.p.p, 0, 0, this), m: this._elem.maskManager.getMaskProperty(this._textData.p.m) }; this._hasMaskedPath = true; } else { this._hasMaskedPath = false; } this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this); }; TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) { this.lettersChangedFlag = lettersChangedFlag; if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) { return; } this._isFirstFrame = false; var alignment = this._moreOptions.alignment.v; var animators = this._animatorsData; var textData = this._textData; var matrixHelper = this.mHelper; var renderType = this._renderType; var renderedLettersCount = this.renderedLetters.length; var xPos; var yPos; var i; var len; var letters = documentData.l; var pathInfo; var currentLength; var currentPoint; var segmentLength; var flag; var pointInd; var segmentInd; var prevPoint; var points; var segments; var partialLength; var totalLength; var perc; var tanAngle; var mask; if (this._hasMaskedPath) { mask = this._pathData.m; if (!this._pathData.n || this._pathData._mdf) { var paths = mask.v; if (this._pathData.r.v) { paths = paths.reverse(); } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi pathInfo = { tLength: 0, segments: [] }; len = paths._length - 1; var bezierData; totalLength = 0; for (i = 0; i < len; i += 1) { 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]]); pathInfo.tLength += bezierData.segmentLength; pathInfo.segments.push(bezierData); totalLength += bezierData.segmentLength; } i = len; if (mask.v.c) { 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]]); pathInfo.tLength += bezierData.segmentLength; pathInfo.segments.push(bezierData); totalLength += bezierData.segmentLength; } this._pathData.pi = pathInfo; } pathInfo = this._pathData.pi; currentLength = this._pathData.f.v; segmentInd = 0; pointInd = 1; segmentLength = 0; flag = true; segments = pathInfo.segments; if (currentLength < 0 && mask.v.c) { if (pathInfo.tLength < Math.abs(currentLength)) { currentLength = -Math.abs(currentLength) % pathInfo.tLength; } segmentInd = segments.length - 1; points = segments[segmentInd].points; pointInd = points.length - 1; while (currentLength < 0) { currentLength += points[pointInd].partialLength; pointInd -= 1; if (pointInd < 0) { segmentInd -= 1; points = segments[segmentInd].points; pointInd = points.length - 1; } } } points = segments[segmentInd].points; prevPoint = points[pointInd - 1]; currentPoint = points[pointInd]; partialLength = currentPoint.partialLength; } len = letters.length; xPos = 0; yPos = 0; var yOff = documentData.finalSize * 1.2 * 0.714; var firstLine = true; var animatorProps; var animatorSelector; var j; var jLen; var letterValue; jLen = animators.length; var mult; var ind = -1; var offf; var xPathPos; var yPathPos; var initPathPos = currentLength; var initSegmentInd = segmentInd; var initPointInd = pointInd; var currentLine = -1; var elemOpacity; var sc; var sw; var fc; var k; var letterSw; var letterSc; var letterFc; var letterM = ''; var letterP = this.defaultPropsArray; var letterO; // if (documentData.j === 2 || documentData.j === 1) { var animatorJustifyOffset = 0; var animatorFirstCharOffset = 0; var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1; var lastIndex = 0; var isNewLine = true; for (i = 0; i < len; i += 1) { if (letters[i].n) { if (animatorJustifyOffset) { animatorJustifyOffset += animatorFirstCharOffset; } while (lastIndex < i) { letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; lastIndex += 1; } animatorJustifyOffset = 0; isNewLine = true; } else { for (j = 0; j < jLen; j += 1) { animatorProps = animators[j].a; if (animatorProps.t.propType) { if (isNewLine && documentData.j === 2) { animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult; } animatorSelector = animators[j].s; mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); if (mult.length) { animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult; } else { animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult; } } } isNewLine = false; } } if (animatorJustifyOffset) { animatorJustifyOffset += animatorFirstCharOffset; } while (lastIndex < i) { letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; lastIndex += 1; } } // for (i = 0; i < len; i += 1) { matrixHelper.reset(); elemOpacity = 1; if (letters[i].n) { xPos = 0; yPos += documentData.yOffset; yPos += firstLine ? 1 : 0; currentLength = initPathPos; firstLine = false; if (this._hasMaskedPath) { segmentInd = initSegmentInd; pointInd = initPointInd; points = segments[segmentInd].points; prevPoint = points[pointInd - 1]; currentPoint = points[pointInd]; partialLength = currentPoint.partialLength; segmentLength = 0; } letterM = ''; letterFc = ''; letterSw = ''; letterO = ''; letterP = this.defaultPropsArray; } else { if (this._hasMaskedPath) { if (currentLine !== letters[i].line) { switch (documentData.j) { case 1: currentLength += totalLength - documentData.lineWidths[letters[i].line]; break; case 2: currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2; break; default: break; } currentLine = letters[i].line; } if (ind !== letters[i].ind) { if (letters[ind]) { currentLength += letters[ind].extra; } currentLength += letters[i].an / 2; ind = letters[i].ind; } currentLength += alignment[0] * letters[i].an * 0.005; var animatorOffset = 0; for (j = 0; j < jLen; j += 1) { animatorProps = animators[j].a; if (animatorProps.p.propType) { animatorSelector = animators[j].s; mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); if (mult.length) { animatorOffset += animatorProps.p.v[0] * mult[0]; } else { animatorOffset += animatorProps.p.v[0] * mult; } } if (animatorProps.a.propType) { animatorSelector = animators[j].s; mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); if (mult.length) { animatorOffset += animatorProps.a.v[0] * mult[0]; } else { animatorOffset += animatorProps.a.v[0] * mult; } } } flag = true; // Force alignment only works with a single line for now if (this._pathData.a.v) { 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); currentLength += this._pathData.f.v; } while (flag) { if (segmentLength + partialLength >= currentLength + animatorOffset || !points) { perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength; xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc; yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc; matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01); flag = false; } else if (points) { segmentLength += currentPoint.partialLength; pointInd += 1; if (pointInd >= points.length) { pointInd = 0; segmentInd += 1; if (!segments[segmentInd]) { if (mask.v.c) { pointInd = 0; segmentInd = 0; points = segments[segmentInd].points; } else { segmentLength -= currentPoint.partialLength; points = null; } } else { points = segments[segmentInd].points; } } if (points) { prevPoint = currentPoint; currentPoint = points[pointInd]; partialLength = currentPoint.partialLength; } } } offf = letters[i].an / 2 - letters[i].add; matrixHelper.translate(-offf, 0, 0); } else { offf = letters[i].an / 2 - letters[i].add; matrixHelper.translate(-offf, 0, 0); // Grouping alignment matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0); } for (j = 0; j < jLen; j += 1) { animatorProps = animators[j].a; if (animatorProps.t.propType) { animatorSelector = animators[j].s; 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" if (xPos !== 0 || documentData.j !== 0) { if (this._hasMaskedPath) { if (mult.length) { currentLength += animatorProps.t.v * mult[0]; } else { currentLength += animatorProps.t.v * mult; } } else if (mult.length) { xPos += animatorProps.t.v * mult[0]; } else { xPos += animatorProps.t.v * mult; } } } } if (documentData.strokeWidthAnim) { sw = documentData.sw || 0; } if (documentData.strokeColorAnim) { if (documentData.sc) { sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]]; } else { sc = [0, 0, 0]; } } if (documentData.fillColorAnim && documentData.fc) { fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]]; } for (j = 0; j < jLen; j += 1) { animatorProps = animators[j].a; if (animatorProps.a.propType) { animatorSelector = animators[j].s; mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); if (mult.length) { matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]); } else { matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult); } } } for (j = 0; j < jLen; j += 1) { animatorProps = animators[j].a; if (animatorProps.s.propType) { animatorSelector = animators[j].s; mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); if (mult.length) { matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1); } else { matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1); } } } for (j = 0; j < jLen; j += 1) { animatorProps = animators[j].a; animatorSelector = animators[j].s; mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); if (animatorProps.sk.propType) { if (mult.length) { matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]); } else { matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult); } } if (animatorProps.r.propType) { if (mult.length) { matrixHelper.rotateZ(-animatorProps.r.v * mult[2]); } else { matrixHelper.rotateZ(-animatorProps.r.v * mult); } } if (animatorProps.ry.propType) { if (mult.length) { matrixHelper.rotateY(animatorProps.ry.v * mult[1]); } else { matrixHelper.rotateY(animatorProps.ry.v * mult); } } if (animatorProps.rx.propType) { if (mult.length) { matrixHelper.rotateX(animatorProps.rx.v * mult[0]); } else { matrixHelper.rotateX(animatorProps.rx.v * mult); } } if (animatorProps.o.propType) { if (mult.length) { elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0]; } else { elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult; } } if (documentData.strokeWidthAnim && animatorProps.sw.propType) { if (mult.length) { sw += animatorProps.sw.v * mult[0]; } else { sw += animatorProps.sw.v * mult; } } if (documentData.strokeColorAnim && animatorProps.sc.propType) { for (k = 0; k < 3; k += 1) { if (mult.length) { sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0]; } else { sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult; } } } if (documentData.fillColorAnim && documentData.fc) { if (animatorProps.fc.propType) { for (k = 0; k < 3; k += 1) { if (mult.length) { fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0]; } else { fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult; } } } if (animatorProps.fh.propType) { if (mult.length) { fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]); } else { fc = addHueToRGB(fc, animatorProps.fh.v * mult); } } if (animatorProps.fs.propType) { if (mult.length) { fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]); } else { fc = addSaturationToRGB(fc, animatorProps.fs.v * mult); } } if (animatorProps.fb.propType) { if (mult.length) { fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]); } else { fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult); } } } } for (j = 0; j < jLen; j += 1) { animatorProps = animators[j].a; if (animatorProps.p.propType) { animatorSelector = animators[j].s; mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); if (this._hasMaskedPath) { if (mult.length) { matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]); } else { matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); } } else if (mult.length) { matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]); } else { matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); } } } if (documentData.strokeWidthAnim) { letterSw = sw < 0 ? 0 : sw; } if (documentData.strokeColorAnim) { letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')'; } if (documentData.fillColorAnim && documentData.fc) { letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')'; } if (this._hasMaskedPath) { matrixHelper.translate(0, -documentData.ls); matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0); if (this._pathData.p.v) { tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]); var rot = Math.atan(tanAngle) * 180 / Math.PI; if (currentPoint.point[0] < prevPoint.point[0]) { rot += 180; } matrixHelper.rotate(-rot * Math.PI / 180); } matrixHelper.translate(xPathPos, yPathPos, 0); currentLength -= alignment[0] * letters[i].an * 0.005; if (letters[i + 1] && ind !== letters[i + 1].ind) { currentLength += letters[i].an / 2; currentLength += documentData.tr * 0.001 * documentData.finalSize; } } else { matrixHelper.translate(xPos, yPos, 0); if (documentData.ps) { // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0); matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); } switch (documentData.j) { case 1: matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0); break; case 2: matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0); break; default: break; } matrixHelper.translate(0, -documentData.ls); matrixHelper.translate(offf, 0, 0); matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0); xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize; } if (renderType === 'html') { letterM = matrixHelper.toCSS(); } else if (renderType === 'svg') { letterM = matrixHelper.to2dCSS(); } else { 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]]; } letterO = elemOpacity; } if (renderedLettersCount <= i) { letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP); this.renderedLetters.push(letterValue); renderedLettersCount += 1; this.lettersChangedFlag = true; } else { letterValue = this.renderedLetters[i]; this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag; } } }; TextAnimatorProperty.prototype.getValue = function () { if (this._elem.globalData.frameId === this._frameId) { return; } this._frameId = this._elem.globalData.frameId; this.iterateDynamicProperties(); }; TextAnimatorProperty.prototype.mHelper = new Matrix(); TextAnimatorProperty.prototype.defaultPropsArray = []; extendPrototype([DynamicPropertyContainer], TextAnimatorProperty); function ITextElement() {} ITextElement.prototype.initElement = function (data, globalData, comp) { this.lettersChangedFlag = true; this.initFrame(); this.initBaseData(data, globalData, comp); this.textProperty = new TextProperty(this, data.t, this.dynamicProperties); this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this); this.initTransform(data, globalData, comp); this.initHierarchy(); this.initRenderable(); this.initRendererElement(); this.createContainerElements(); this.createRenderableComponents(); this.createContent(); this.hide(); this.textAnimator.searchProperties(this.dynamicProperties); }; ITextElement.prototype.prepareFrame = function (num) { this._mdf = false; this.prepareRenderableFrame(num); this.prepareProperties(num, this.isInRange); }; ITextElement.prototype.createPathShape = function (matrixHelper, shapes) { var j; var jLen = shapes.length; var pathNodes; var shapeStr = ''; for (j = 0; j < jLen; j += 1) { if (shapes[j].ty === 'sh') { pathNodes = shapes[j].ks.k; shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper); } } return shapeStr; }; ITextElement.prototype.updateDocumentData = function (newData, index) { this.textProperty.updateDocumentData(newData, index); }; ITextElement.prototype.canResizeFont = function (_canResize) { this.textProperty.canResizeFont(_canResize); }; ITextElement.prototype.setMinimumFontSize = function (_fontSize) { this.textProperty.setMinimumFontSize(_fontSize); }; ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) { if (documentData.ps) { matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); } matrixHelper.translate(0, -documentData.ls, 0); switch (documentData.j) { case 1: matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0); break; case 2: matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0); break; default: break; } matrixHelper.translate(xPos, yPos, 0); }; ITextElement.prototype.buildColor = function (colorData) { return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')'; }; ITextElement.prototype.emptyProp = new LetterProps(); ITextElement.prototype.destroy = function () {}; ITextElement.prototype.validateText = function () { if (this.textProperty._mdf || this.textProperty._isFirstFrame) { this.buildNewText(); this.textProperty._isFirstFrame = false; this.textProperty._mdf = false; } }; var emptyShapeData = { shapes: [] }; function SVGTextLottieElement(data, globalData, comp) { this.textSpans = []; this.renderType = 'svg'; this.initElement(data, globalData, comp); } extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement); SVGTextLottieElement.prototype.createContent = function () { if (this.data.singleShape && !this.globalData.fontManager.chars) { this.textContainer = createNS('text'); } }; SVGTextLottieElement.prototype.buildTextContents = function (textArray) { var i = 0; var len = textArray.length; var textContents = []; var currentTextContent = ''; while (i < len) { if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) { textContents.push(currentTextContent); currentTextContent = ''; } else { currentTextContent += textArray[i]; } i += 1; } textContents.push(currentTextContent); return textContents; }; SVGTextLottieElement.prototype.buildShapeData = function (data, scale) { // data should probably be cloned to apply scale separately to each instance of a text on different layers // but since text internal content gets only rendered once and then it's never rerendered, // it's probably safe not to clone data and reuse always the same instance even if the object is mutated. // Avoiding cloning is preferred since cloning each character shape data is expensive if (data.shapes && data.shapes.length) { var shape = data.shapes[0]; if (shape.it) { var shapeItem = shape.it[shape.it.length - 1]; if (shapeItem.s) { shapeItem.s.k[0] = scale; shapeItem.s.k[1] = scale; } } } return data; }; SVGTextLottieElement.prototype.buildNewText = function () { this.addDynamicProperty(this); var i; var len; var documentData = this.textProperty.currentData; this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0); if (documentData.fc) { this.layerElement.setAttribute('fill', this.buildColor(documentData.fc)); } else { this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)'); } if (documentData.sc) { this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc)); this.layerElement.setAttribute('stroke-width', documentData.sw); } this.layerElement.setAttribute('font-size', documentData.finalSize); var fontData = this.globalData.fontManager.getFontByName(documentData.f); if (fontData.fClass) { this.layerElement.setAttribute('class', fontData.fClass); } else { this.layerElement.setAttribute('font-family', fontData.fFamily); var fWeight = documentData.fWeight; var fStyle = documentData.fStyle; this.layerElement.setAttribute('font-style', fStyle); this.layerElement.setAttribute('font-weight', fWeight); } this.layerElement.setAttribute('aria-label', documentData.t); var letters = documentData.l || []; var usesGlyphs = !!this.globalData.fontManager.chars; len = letters.length; var tSpan; var matrixHelper = this.mHelper; var shapeStr = ''; var singleShape = this.data.singleShape; var xPos = 0; var yPos = 0; var firstLine = true; var trackingOffset = documentData.tr * 0.001 * documentData.finalSize; if (singleShape && !usesGlyphs && !documentData.sz) { var tElement = this.textContainer; var justify = 'start'; switch (documentData.j) { case 1: justify = 'end'; break; case 2: justify = 'middle'; break; default: justify = 'start'; break; } tElement.setAttribute('text-anchor', justify); tElement.setAttribute('letter-spacing', trackingOffset); var textContent = this.buildTextContents(documentData.finalText); len = textContent.length; yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0; for (i = 0; i < len; i += 1) { tSpan = this.textSpans[i].span || createNS('tspan'); tSpan.textContent = textContent[i]; tSpan.setAttribute('x', 0); tSpan.setAttribute('y', yPos); tSpan.style.display = 'inherit'; tElement.appendChild(tSpan); if (!this.textSpans[i]) { this.textSpans[i] = { span: null, glyph: null }; } this.textSpans[i].span = tSpan; yPos += documentData.finalLineHeight; } this.layerElement.appendChild(tElement); } else { var cachedSpansLength = this.textSpans.length; var charData; for (i = 0; i < len; i += 1) { if (!this.textSpans[i]) { this.textSpans[i] = { span: null, childSpan: null, glyph: null }; } if (!usesGlyphs || !singleShape || i === 0) { tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text'); if (cachedSpansLength <= i) { tSpan.setAttribute('stroke-linecap', 'butt'); tSpan.setAttribute('stroke-linejoin', 'round'); tSpan.setAttribute('stroke-miterlimit', '4'); this.textSpans[i].span = tSpan; if (usesGlyphs) { var childSpan = createNS('g'); tSpan.appendChild(childSpan); this.textSpans[i].childSpan = childSpan; } this.textSpans[i].span = tSpan; this.layerElement.appendChild(tSpan); } tSpan.style.display = 'inherit'; } matrixHelper.reset(); if (singleShape) { if (letters[i].n) { xPos = -trackingOffset; yPos += documentData.yOffset; yPos += firstLine ? 1 : 0; firstLine = false; } this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset; xPos += trackingOffset; } if (usesGlyphs) { charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); var glyphElement; // t === 1 means the character has been replaced with an animated shaped if (charData.t === 1) { glyphElement = new SVGCompElement(charData.data, this.globalData, this); } else { var data = emptyShapeData; if (charData.data && charData.data.shapes) { data = this.buildShapeData(charData.data, documentData.finalSize); } glyphElement = new SVGShapeElement(data, this.globalData, this); } if (this.textSpans[i].glyph) { var glyph = this.textSpans[i].glyph; this.textSpans[i].childSpan.removeChild(glyph.layerElement); glyph.destroy(); } this.textSpans[i].glyph = glyphElement; glyphElement._debug = true; glyphElement.prepareFrame(0); glyphElement.renderFrame(); this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale // this might have issues with strokes and might need a different solution if (charData.t === 1) { this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')'); } } else { if (singleShape) { tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')'); } tSpan.textContent = letters[i].val; tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); } // } if (singleShape && tSpan) { tSpan.setAttribute('d', shapeStr); } } while (i < this.textSpans.length) { this.textSpans[i].span.style.display = 'none'; i += 1; } this._sizeChanged = true; }; SVGTextLottieElement.prototype.sourceRectAtTime = function () { this.prepareFrame(this.comp.renderedFrame - this.data.st); this.renderInnerContent(); if (this._sizeChanged) { this._sizeChanged = false; var textBox = this.layerElement.getBBox(); this.bbox = { top: textBox.y, left: textBox.x, width: textBox.width, height: textBox.height }; } return this.bbox; }; SVGTextLottieElement.prototype.getValue = function () { var i; var len = this.textSpans.length; var glyphElement; this.renderedFrame = this.comp.renderedFrame; for (i = 0; i < len; i += 1) { glyphElement = this.textSpans[i].glyph; if (glyphElement) { glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st); if (glyphElement._mdf) { this._mdf = true; } } } }; SVGTextLottieElement.prototype.renderInnerContent = function () { this.validateText(); if (!this.data.singleShape || this._mdf) { this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) { this._sizeChanged = true; var i; var len; var renderedLetters = this.textAnimator.renderedLetters; var letters = this.textProperty.currentData.l; len = letters.length; var renderedLetter; var textSpan; var glyphElement; for (i = 0; i < len; i += 1) { if (!letters[i].n) { renderedLetter = renderedLetters[i]; textSpan = this.textSpans[i].span; glyphElement = this.textSpans[i].glyph; if (glyphElement) { glyphElement.renderFrame(); } if (renderedLetter._mdf.m) { textSpan.setAttribute('transform', renderedLetter.m); } if (renderedLetter._mdf.o) { textSpan.setAttribute('opacity', renderedLetter.o); } if (renderedLetter._mdf.sw) { textSpan.setAttribute('stroke-width', renderedLetter.sw); } if (renderedLetter._mdf.sc) { textSpan.setAttribute('stroke', renderedLetter.sc); } if (renderedLetter._mdf.fc) { textSpan.setAttribute('fill', renderedLetter.fc); } } } } } }; function ISolidElement(data, globalData, comp) { this.initElement(data, globalData, comp); } extendPrototype([IImageElement], ISolidElement); ISolidElement.prototype.createContent = function () { var rect = createNS('rect'); /// /rect.style.width = this.data.sw; /// /rect.style.height = this.data.sh; /// /rect.style.fill = this.data.sc; rect.setAttribute('width', this.data.sw); rect.setAttribute('height', this.data.sh); rect.setAttribute('fill', this.data.sc); this.layerElement.appendChild(rect); }; function NullElement(data, globalData, comp) { this.initFrame(); this.initBaseData(data, globalData, comp); this.initFrame(); this.initTransform(data, globalData, comp); this.initHierarchy(); } NullElement.prototype.prepareFrame = function (num) { this.prepareProperties(num, true); }; NullElement.prototype.renderFrame = function () {}; NullElement.prototype.getBaseElement = function () { return null; }; NullElement.prototype.destroy = function () {}; NullElement.prototype.sourceRectAtTime = function () {}; NullElement.prototype.hide = function () {}; extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement); function SVGRendererBase() {} extendPrototype([BaseRenderer], SVGRendererBase); SVGRendererBase.prototype.createNull = function (data) { return new NullElement(data, this.globalData, this); }; SVGRendererBase.prototype.createShape = function (data) { return new SVGShapeElement(data, this.globalData, this); }; SVGRendererBase.prototype.createText = function (data) { return new SVGTextLottieElement(data, this.globalData, this); }; SVGRendererBase.prototype.createImage = function (data) { return new IImageElement(data, this.globalData, this); }; SVGRendererBase.prototype.createSolid = function (data) { return new ISolidElement(data, this.globalData, this); }; SVGRendererBase.prototype.configAnimation = function (animData) { this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); if (this.renderConfig.viewBoxSize) { this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize); } else { this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h); } if (!this.renderConfig.viewBoxOnly) { this.svgElement.setAttribute('width', animData.w); this.svgElement.setAttribute('height', animData.h); this.svgElement.style.width = '100%'; this.svgElement.style.height = '100%'; this.svgElement.style.transform = 'translate3d(0,0,0)'; this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility; } if (this.renderConfig.width) { this.svgElement.setAttribute('width', this.renderConfig.width); } if (this.renderConfig.height) { this.svgElement.setAttribute('height', this.renderConfig.height); } if (this.renderConfig.className) { this.svgElement.setAttribute('class', this.renderConfig.className); } if (this.renderConfig.id) { this.svgElement.setAttribute('id', this.renderConfig.id); } if (this.renderConfig.focusable !== undefined) { this.svgElement.setAttribute('focusable', this.renderConfig.focusable); } this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)'; // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = "0px 0px 0px"; this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation var defs = this.globalData.defs; this.setupGlobalData(animData, defs); this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; this.data = animData; var maskElement = createNS('clipPath'); var rect = createNS('rect'); rect.setAttribute('width', animData.w); rect.setAttribute('height', animData.h); rect.setAttribute('x', 0); rect.setAttribute('y', 0); var maskId = createElementID(); maskElement.setAttribute('id', maskId); maskElement.appendChild(rect); this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')'); defs.appendChild(maskElement); this.layers = animData.layers; this.elements = createSizedArray(animData.layers.length); }; SVGRendererBase.prototype.destroy = function () { if (this.animationItem.wrapper) { this.animationItem.wrapper.innerText = ''; } this.layerElement = null; this.globalData.defs = null; var i; var len = this.layers ? this.layers.length : 0; for (i = 0; i < len; i += 1) { if (this.elements[i] && this.elements[i].destroy) { this.elements[i].destroy(); } } this.elements.length = 0; this.destroyed = true; this.animationItem = null; }; SVGRendererBase.prototype.updateContainerSize = function () {}; SVGRendererBase.prototype.findIndexByInd = function (ind) { var i = 0; var len = this.layers.length; for (i = 0; i < len; i += 1) { if (this.layers[i].ind === ind) { return i; } } return -1; }; SVGRendererBase.prototype.buildItem = function (pos) { var elements = this.elements; if (elements[pos] || this.layers[pos].ty === 99) { return; } elements[pos] = true; var element = this.createItem(this.layers[pos]); elements[pos] = element; if (getExpressionsPlugin()) { if (this.layers[pos].ty === 0) { this.globalData.projectInterface.registerComposition(element); } element.initExpressions(); } this.appendElementInPos(element, pos); if (this.layers[pos].tt) { var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1; if (elementIndex === -1) { return; } if (!this.elements[elementIndex] || this.elements[elementIndex] === true) { this.buildItem(elementIndex); this.addPendingElement(element); } else { var matteElement = elements[elementIndex]; var matteMask = matteElement.getMatte(this.layers[pos].tt); element.setMatte(matteMask); } } }; SVGRendererBase.prototype.checkPendingElements = function () { while (this.pendingElements.length) { var element = this.pendingElements.pop(); element.checkParenting(); if (element.data.tt) { var i = 0; var len = this.elements.length; while (i < len) { if (this.elements[i] === element) { var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1; var matteElement = this.elements[elementIndex]; var matteMask = matteElement.getMatte(this.layers[i].tt); element.setMatte(matteMask); break; } i += 1; } } } }; SVGRendererBase.prototype.renderFrame = function (num) { if (this.renderedFrame === num || this.destroyed) { return; } if (num === null) { num = this.renderedFrame; } else { this.renderedFrame = num; } // console.log('-------'); // console.log('FRAME ',num); this.globalData.frameNum = num; this.globalData.frameId += 1; this.globalData.projectInterface.currentFrame = num; this.globalData._mdf = false; var i; var len = this.layers.length; if (!this.completeLayers) { this.checkLayers(num); } for (i = len - 1; i >= 0; i -= 1) { if (this.completeLayers || this.elements[i]) { this.elements[i].prepareFrame(num - this.layers[i].st); } } if (this.globalData._mdf) { for (i = 0; i < len; i += 1) { if (this.completeLayers || this.elements[i]) { this.elements[i].renderFrame(); } } } }; SVGRendererBase.prototype.appendElementInPos = function (element, pos) { var newElement = element.getBaseElement(); if (!newElement) { return; } var i = 0; var nextElement; while (i < pos) { if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) { nextElement = this.elements[i].getBaseElement(); } i += 1; } if (nextElement) { this.layerElement.insertBefore(newElement, nextElement); } else { this.layerElement.appendChild(newElement); } }; SVGRendererBase.prototype.hide = function () { this.layerElement.style.display = 'none'; }; SVGRendererBase.prototype.show = function () { this.layerElement.style.display = 'block'; }; function ICompElement() {} extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement); ICompElement.prototype.initElement = function (data, globalData, comp) { this.initFrame(); this.initBaseData(data, globalData, comp); this.initTransform(data, globalData, comp); this.initRenderable(); this.initHierarchy(); this.initRendererElement(); this.createContainerElements(); this.createRenderableComponents(); if (this.data.xt || !globalData.progressiveLoad) { this.buildAllItems(); } this.hide(); }; /* ICompElement.prototype.hide = function(){ if(!this.hidden){ this.hideElement(); var i,len = this.elements.length; for( i = 0; i < len; i+=1 ){ if(this.elements[i]){ this.elements[i].hide(); } } } }; */ ICompElement.prototype.prepareFrame = function (num) { this._mdf = false; this.prepareRenderableFrame(num); this.prepareProperties(num, this.isInRange); if (!this.isInRange && !this.data.xt) { return; } if (!this.tm._placeholder) { var timeRemapped = this.tm.v; if (timeRemapped === this.data.op) { timeRemapped = this.data.op - 1; } this.renderedFrame = timeRemapped; } else { this.renderedFrame = num / this.data.sr; } var i; var len = this.elements.length; if (!this.completeLayers) { this.checkLayers(this.renderedFrame); } // This iteration needs to be backwards because of how expressions connect between each other for (i = len - 1; i >= 0; i -= 1) { if (this.completeLayers || this.elements[i]) { this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st); if (this.elements[i]._mdf) { this._mdf = true; } } } }; ICompElement.prototype.renderInnerContent = function () { var i; var len = this.layers.length; for (i = 0; i < len; i += 1) { if (this.completeLayers || this.elements[i]) { this.elements[i].renderFrame(); } } }; ICompElement.prototype.setElements = function (elems) { this.elements = elems; }; ICompElement.prototype.getElements = function () { return this.elements; }; ICompElement.prototype.destroyElements = function () { var i; var len = this.layers.length; for (i = 0; i < len; i += 1) { if (this.elements[i]) { this.elements[i].destroy(); } } }; ICompElement.prototype.destroy = function () { this.destroyElements(); this.destroyBaseElement(); }; function SVGCompElement(data, globalData, comp) { this.layers = data.layers; this.supports3d = true; this.completeLayers = false; this.pendingElements = []; this.elements = this.layers ? createSizedArray(this.layers.length) : []; this.initElement(data, globalData, comp); this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; } extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement); SVGCompElement.prototype.createComp = function (data) { return new SVGCompElement(data, this.globalData, this); }; function SVGRenderer(animationItem, config) { this.animationItem = animationItem; this.layers = null; this.renderedFrame = -1; this.svgElement = createNS('svg'); var ariaLabel = ''; if (config && config.title) { var titleElement = createNS('title'); var titleId = createElementID(); titleElement.setAttribute('id', titleId); titleElement.textContent = config.title; this.svgElement.appendChild(titleElement); ariaLabel += titleId; } if (config && config.description) { var descElement = createNS('desc'); var descId = createElementID(); descElement.setAttribute('id', descId); descElement.textContent = config.description; this.svgElement.appendChild(descElement); ariaLabel += ' ' + descId; } if (ariaLabel) { this.svgElement.setAttribute('aria-labelledby', ariaLabel); } var defs = createNS('defs'); this.svgElement.appendChild(defs); var maskElement = createNS('g'); this.svgElement.appendChild(maskElement); this.layerElement = maskElement; this.renderConfig = { preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet', imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice', contentVisibility: config && config.contentVisibility || 'visible', progressiveLoad: config && config.progressiveLoad || false, hideOnTransparent: !(config && config.hideOnTransparent === false), viewBoxOnly: config && config.viewBoxOnly || false, viewBoxSize: config && config.viewBoxSize || false, className: config && config.className || '', id: config && config.id || '', focusable: config && config.focusable, filterSize: { width: config && config.filterSize && config.filterSize.width || '100%', height: config && config.filterSize && config.filterSize.height || '100%', x: config && config.filterSize && config.filterSize.x || '0%', y: config && config.filterSize && config.filterSize.y || '0%' }, width: config && config.width, height: config && config.height, runExpressions: !config || config.runExpressions === undefined || config.runExpressions }; this.globalData = { _mdf: false, frameNum: -1, defs: defs, renderConfig: this.renderConfig }; this.elements = []; this.pendingElements = []; this.destroyed = false; this.rendererType = 'svg'; } extendPrototype([SVGRendererBase], SVGRenderer); SVGRenderer.prototype.createComp = function (data) { return new SVGCompElement(data, this.globalData, this); }; function ShapeTransformManager() { this.sequences = {}; this.sequenceList = []; this.transform_key_count = 0; } ShapeTransformManager.prototype = { addTransformSequence: function addTransformSequence(transforms) { var i; var len = transforms.length; var key = '_'; for (i = 0; i < len; i += 1) { key += transforms[i].transform.key + '_'; } var sequence = this.sequences[key]; if (!sequence) { sequence = { transforms: [].concat(transforms), finalTransform: new Matrix(), _mdf: false }; this.sequences[key] = sequence; this.sequenceList.push(sequence); } return sequence; }, processSequence: function processSequence(sequence, isFirstFrame) { var i = 0; var len = sequence.transforms.length; var _mdf = isFirstFrame; while (i < len && !isFirstFrame) { if (sequence.transforms[i].transform.mProps._mdf) { _mdf = true; break; } i += 1; } if (_mdf) { sequence.finalTransform.reset(); for (i = len - 1; i >= 0; i -= 1) { sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v); } } sequence._mdf = _mdf; }, processSequences: function processSequences(isFirstFrame) { var i; var len = this.sequenceList.length; for (i = 0; i < len; i += 1) { this.processSequence(this.sequenceList[i], isFirstFrame); } }, getNewKey: function getNewKey() { this.transform_key_count += 1; return '_' + this.transform_key_count; } }; var lumaLoader = function lumaLoader() { var id = '__lottie_element_luma_buffer'; var lumaBuffer = null; var lumaBufferCtx = null; var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame. // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used. // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask. // Naming it solution 2 to mark the extra comment lines. /* var svgString = [ '<svg xmlns="http://www.w3.org/2000/svg">', '<filter id="' + id + '">', '<feColorMatrix type="matrix" color-interpolation-filters="sRGB" values="', '0.3, 0.3, 0.3, 0, 0, ', '0.3, 0.3, 0.3, 0, 0, ', '0.3, 0.3, 0.3, 0, 0, ', '0.3, 0.3, 0.3, 0, 0', '"/>', '</filter>', '</svg>', ].join(''); var blob = new Blob([svgString], { type: 'image/svg+xml' }); var url = URL.createObjectURL(blob); */ function createLumaSvgFilter() { var _svg = createNS('svg'); var fil = createNS('filter'); var matrix = createNS('feColorMatrix'); fil.setAttribute('id', id); matrix.setAttribute('type', 'matrix'); matrix.setAttribute('color-interpolation-filters', 'sRGB'); matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0'); fil.appendChild(matrix); _svg.appendChild(fil); _svg.setAttribute('id', id + '_svg'); if (featureSupport.svgLumaHidden) { _svg.style.display = 'none'; } return _svg; } function loadLuma() { if (!lumaBuffer) { svg = createLumaSvgFilter(); document.body.appendChild(svg); lumaBuffer = createTag('canvas'); lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2 lumaBufferCtx.filter = 'url(#' + id + ')'; lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)'; lumaBufferCtx.fillRect(0, 0, 1, 1); } } function getLuma(canvas) { if (!lumaBuffer) { loadLuma(); } lumaBuffer.width = canvas.width; lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2 lumaBufferCtx.filter = 'url(#' + id + ')'; return lumaBuffer; } return { load: loadLuma, get: getLuma }; }; function createCanvas(width, height) { if (featureSupport.offscreenCanvas) { return new OffscreenCanvas(width, height); } var canvas = createTag('canvas'); canvas.width = width; canvas.height = height; return canvas; } var assetLoader = function () { return { loadLumaCanvas: lumaLoader.load, getLumaCanvas: lumaLoader.get, createCanvas: createCanvas }; }(); var registeredEffects = {}; function CVEffects(elem) { var i; var len = elem.data.ef ? elem.data.ef.length : 0; this.filters = []; var filterManager; for (i = 0; i < len; i += 1) { filterManager = null; var type = elem.data.ef[i].ty; if (registeredEffects[type]) { var Effect = registeredEffects[type].effect; filterManager = new Effect(elem.effectsManager.effectElements[i], elem); } if (filterManager) { this.filters.push(filterManager); } } if (this.filters.length) { elem.addRenderableComponent(this); } } CVEffects.prototype.renderFrame = function (_isFirstFrame) { var i; var len = this.filters.length; for (i = 0; i < len; i += 1) { this.filters[i].renderFrame(_isFirstFrame); } }; CVEffects.prototype.getEffects = function (type) { var i; var len = this.filters.length; var effects = []; for (i = 0; i < len; i += 1) { if (this.filters[i].type === type) { effects.push(this.filters[i]); } } return effects; }; function registerEffect(id, effect) { registeredEffects[id] = { effect: effect }; } function CVMaskElement(data, element) { this.data = data; this.element = element; this.masksProperties = this.data.masksProperties || []; this.viewData = createSizedArray(this.masksProperties.length); var i; var len = this.masksProperties.length; var hasMasks = false; for (i = 0; i < len; i += 1) { if (this.masksProperties[i].mode !== 'n') { hasMasks = true; } this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3); } this.hasMasks = hasMasks; if (hasMasks) { this.element.addRenderableComponent(this); } } CVMaskElement.prototype.renderFrame = function () { if (!this.hasMasks) { return; } var transform = this.element.finalTransform.mat; var ctx = this.element.canvasContext; var i; var len = this.masksProperties.length; var pt; var pts; var data; ctx.beginPath(); for (i = 0; i < len; i += 1) { if (this.masksProperties[i].mode !== 'n') { if (this.masksProperties[i].inv) { ctx.moveTo(0, 0); ctx.lineTo(this.element.globalData.compSize.w, 0); ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h); ctx.lineTo(0, this.element.globalData.compSize.h); ctx.lineTo(0, 0); } data = this.viewData[i].v; pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0); ctx.moveTo(pt[0], pt[1]); var j; var jLen = data._length; for (j = 1; j < jLen; j += 1) { pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]); ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); } pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]); ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); } } this.element.globalData.renderer.save(true); ctx.clip(); }; CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty; CVMaskElement.prototype.destroy = function () { this.element = null; }; function CVBaseElement() {} var operationsMap = { 1: 'source-in', 2: 'source-out', 3: 'source-in', 4: 'source-out' }; CVBaseElement.prototype = { createElements: function createElements() {}, initRendererElement: function initRendererElement() {}, createContainerElements: function createContainerElements() { // If the layer is masked we will use two buffers to store each different states of the drawing // This solution is not ideal for several reason. But unfortunately, because of the recursive // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask. // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer // It might be challenging because the layer most likely is transformed in some way if (this.data.tt >= 1) { this.buffers = []; var canvasContext = this.globalData.canvasContext; var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height); this.buffers.push(bufferCanvas); var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height); this.buffers.push(bufferCanvas2); if (this.data.tt >= 3 && !document._isProxy) { assetLoader.loadLumaCanvas(); } } this.canvasContext = this.globalData.canvasContext; this.transformCanvas = this.globalData.transformCanvas; this.renderableEffectsManager = new CVEffects(this); this.searchEffectTransforms(); }, createContent: function createContent() {}, setBlendMode: function setBlendMode() { var globalData = this.globalData; if (globalData.blendMode !== this.data.bm) { globalData.blendMode = this.data.bm; var blendModeValue = getBlendMode(this.data.bm); globalData.canvasContext.globalCompositeOperation = blendModeValue; } }, createRenderableComponents: function createRenderableComponents() { this.maskManager = new CVMaskElement(this.data, this); this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT); }, hideElement: function hideElement() { if (!this.hidden && (!this.isInRange || this.isTransparent)) { this.hidden = true; } }, showElement: function showElement() { if (this.isInRange && !this.isTransparent) { this.hidden = false; this._isFirstFrame = true; this.maskManager._isFirstFrame = true; } }, clearCanvas: function clearCanvas(canvasContext) { canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy); }, prepareLayer: function prepareLayer() { if (this.data.tt >= 1) { var buffer = this.buffers[0]; var bufferCtx = buffer.getContext('2d'); this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas // TODO: Check if there is a way to clear the canvas without resetting the transform this.currentTransform = this.canvasContext.getTransform(); this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); this.clearCanvas(this.canvasContext); this.canvasContext.setTransform(this.currentTransform); } }, exitLayer: function exitLayer() { if (this.data.tt >= 1) { var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing // that only contains the content of this layer // (if it is a composition, it also includes the nested layers) var bufferCtx = buffer.getContext('2d'); this.clearCanvas(bufferCtx); bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); this.clearCanvas(this.canvasContext); this.canvasContext.setTransform(this.currentTransform); // We draw the mask var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1); mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer) this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error if (this.data.tt >= 3 && !document._isProxy) { // We copy the painted mask to a buffer that has a color matrix filter applied to it // that applies the rgb values to the alpha channel var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas); var lumaBufferCtx = lumaBuffer.getContext('2d'); lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0); this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it this.canvasContext.drawImage(lumaBuffer, 0, 0); } this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt]; this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing) // We use destination-over to draw the global drawing below the current layer this.canvasContext.globalCompositeOperation = 'destination-over'; this.canvasContext.drawImage(this.buffers[0], 0, 0); this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation this.canvasContext.globalCompositeOperation = 'source-over'; } }, renderFrame: function renderFrame(forceRender) { if (this.hidden || this.data.hd) { return; } if (this.data.td === 1 && !forceRender) { return; } this.renderTransform(); this.renderRenderable(); this.renderLocalTransform(); this.setBlendMode(); var forceRealStack = this.data.ty === 0; this.prepareLayer(); this.globalData.renderer.save(forceRealStack); this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props); this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity); this.renderInnerContent(); this.globalData.renderer.restore(forceRealStack); this.exitLayer(); if (this.maskManager.hasMasks) { this.globalData.renderer.restore(true); } if (this._isFirstFrame) { this._isFirstFrame = false; } }, destroy: function destroy() { this.canvasContext = null; this.data = null; this.globalData = null; this.maskManager.destroy(); }, mHelper: new Matrix() }; CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement; CVBaseElement.prototype.show = CVBaseElement.prototype.showElement; function CVShapeData(element, data, styles, transformsManager) { this.styledShapes = []; this.tr = [0, 0, 0, 0, 0, 0]; var ty = 4; if (data.ty === 'rc') { ty = 5; } else if (data.ty === 'el') { ty = 6; } else if (data.ty === 'sr') { ty = 7; } this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element); var i; var len = styles.length; var styledShape; for (i = 0; i < len; i += 1) { if (!styles[i].closed) { styledShape = { transforms: transformsManager.addTransformSequence(styles[i].transforms), trNodes: [] }; this.styledShapes.push(styledShape); styles[i].elements.push(styledShape); } } } CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated; function CVShapeElement(data, globalData, comp) { this.shapes = []; this.shapesData = data.shapes; this.stylesList = []; this.itemsData = []; this.prevViewData = []; this.shapeModifiers = []; this.processedElements = []; this.transformsManager = new ShapeTransformManager(); this.initElement(data, globalData, comp); } extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement); CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement; CVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: false }; CVShapeElement.prototype.dashResetter = []; CVShapeElement.prototype.createContent = function () { this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); }; CVShapeElement.prototype.createStyleElement = function (data, transforms) { var styleElem = { data: data, type: data.ty, preTransforms: this.transformsManager.addTransformSequence(transforms), transforms: [], elements: [], closed: data.hd === true }; var elementData = {}; if (data.ty === 'fl' || data.ty === 'st') { elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this); if (!elementData.c.k) { styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')'; } } else if (data.ty === 'gf' || data.ty === 'gs') { elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this); elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this); elementData.h = PropertyFactory.getProp(this, data.h || { k: 0 }, 0, 0.01, this); elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this); elementData.g = new GradientProperty(this, data.g, this); } elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this); if (data.ty === 'st' || data.ty === 'gs') { styleElem.lc = lineCapEnum[data.lc || 2]; styleElem.lj = lineJoinEnum[data.lj || 2]; if (data.lj == 1) { // eslint-disable-line eqeqeq styleElem.ml = data.ml; } elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this); if (!elementData.w.k) { styleElem.wi = elementData.w.v; } if (data.d) { var d = new DashProperty(this, data.d, 'canvas', this); elementData.d = d; if (!elementData.d.k) { styleElem.da = elementData.d.dashArray; styleElem["do"] = elementData.d.dashoffset[0]; } } } else { styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero'; } this.stylesList.push(styleElem); elementData.style = styleElem; return elementData; }; CVShapeElement.prototype.createGroupElement = function () { var elementData = { it: [], prevViewData: [] }; return elementData; }; CVShapeElement.prototype.createTransformElement = function (data) { var elementData = { transform: { opacity: 1, _opMdf: false, key: this.transformsManager.getNewKey(), op: PropertyFactory.getProp(this, data.o, 0, 0.01, this), mProps: TransformPropertyFactory.getTransformProperty(this, data, this) } }; return elementData; }; CVShapeElement.prototype.createShapeElement = function (data) { var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager); this.shapes.push(elementData); this.addShapeToModifiers(elementData); return elementData; }; CVShapeElement.prototype.reloadShapes = function () { this._isFirstFrame = true; var i; var len = this.itemsData.length; for (i = 0; i < len; i += 1) { this.prevViewData[i] = this.itemsData[i]; } this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); len = this.dynamicProperties.length; for (i = 0; i < len; i += 1) { this.dynamicProperties[i].getValue(); } this.renderModifiers(); this.transformsManager.processSequences(this._isFirstFrame); }; CVShapeElement.prototype.addTransformToStyleList = function (transform) { var i; var len = this.stylesList.length; for (i = 0; i < len; i += 1) { if (!this.stylesList[i].closed) { this.stylesList[i].transforms.push(transform); } } }; CVShapeElement.prototype.removeTransformFromStyleList = function () { var i; var len = this.stylesList.length; for (i = 0; i < len; i += 1) { if (!this.stylesList[i].closed) { this.stylesList[i].transforms.pop(); } } }; CVShapeElement.prototype.closeStyles = function (styles) { var i; var len = styles.length; for (i = 0; i < len; i += 1) { styles[i].closed = true; } }; CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) { var i; var len = arr.length - 1; var j; var jLen; var ownStyles = []; var ownModifiers = []; var processedPos; var modifier; var currentTransform; var ownTransforms = [].concat(transforms); for (i = len; i >= 0; i -= 1) { processedPos = this.searchProcessedElement(arr[i]); if (!processedPos) { arr[i]._shouldRender = shouldRender; } else { itemsData[i] = prevViewData[processedPos - 1]; } if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') { if (!processedPos) { itemsData[i] = this.createStyleElement(arr[i], ownTransforms); } else { itemsData[i].style.closed = false; } ownStyles.push(itemsData[i].style); } else if (arr[i].ty === 'gr') { if (!processedPos) { itemsData[i] = this.createGroupElement(arr[i]); } else { jLen = itemsData[i].it.length; for (j = 0; j < jLen; j += 1) { itemsData[i].prevViewData[j] = itemsData[i].it[j]; } } this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms); } else if (arr[i].ty === 'tr') { if (!processedPos) { currentTransform = this.createTransformElement(arr[i]); itemsData[i] = currentTransform; } ownTransforms.push(itemsData[i]); this.addTransformToStyleList(itemsData[i]); } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') { if (!processedPos) { itemsData[i] = this.createShapeElement(arr[i]); } } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') { if (!processedPos) { modifier = ShapeModifiers.getModifier(arr[i].ty); modifier.init(this, arr[i]); itemsData[i] = modifier; this.shapeModifiers.push(modifier); } else { modifier = itemsData[i]; modifier.closed = false; } ownModifiers.push(modifier); } else if (arr[i].ty === 'rp') { if (!processedPos) { modifier = ShapeModifiers.getModifier(arr[i].ty); itemsData[i] = modifier; modifier.init(this, arr, i, itemsData); this.shapeModifiers.push(modifier); shouldRender = false; } else { modifier = itemsData[i]; modifier.closed = true; } ownModifiers.push(modifier); } this.addProcessedElement(arr[i], i + 1); } this.removeTransformFromStyleList(); this.closeStyles(ownStyles); len = ownModifiers.length; for (i = 0; i < len; i += 1) { ownModifiers[i].closed = true; } }; CVShapeElement.prototype.renderInnerContent = function () { this.transformHelper.opacity = 1; this.transformHelper._opMdf = false; this.renderModifiers(); this.transformsManager.processSequences(this._isFirstFrame); this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true); }; CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) { if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) { groupTransform.opacity = parentTransform.opacity; groupTransform.opacity *= groupTransform.op.v; groupTransform._opMdf = true; } }; CVShapeElement.prototype.drawLayer = function () { var i; var len = this.stylesList.length; var j; var jLen; var k; var kLen; var elems; var nodes; var renderer = this.globalData.renderer; var ctx = this.globalData.canvasContext; var type; var currentStyle; for (i = 0; i < len; i += 1) { currentStyle = this.stylesList[i]; type = currentStyle.type; // Skipping style when // Stroke width equals 0 // style should not be rendered (extra unused repeaters) // current opacity equals 0 // global opacity equals 0 if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) { renderer.save(); elems = currentStyle.elements; if (type === 'st' || type === 'gs') { renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd; renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi; renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc; renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj; renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0; } else { renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd; } renderer.ctxOpacity(currentStyle.coOp); if (type !== 'st' && type !== 'gs') { ctx.beginPath(); } renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props); jLen = elems.length; for (j = 0; j < jLen; j += 1) { if (type === 'st' || type === 'gs') { ctx.beginPath(); if (currentStyle.da) { ctx.setLineDash(currentStyle.da); ctx.lineDashOffset = currentStyle["do"]; } } nodes = elems[j].trNodes; kLen = nodes.length; for (k = 0; k < kLen; k += 1) { if (nodes[k].t === 'm') { ctx.moveTo(nodes[k].p[0], nodes[k].p[1]); } else if (nodes[k].t === 'c') { 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]); } else { ctx.closePath(); } } if (type === 'st' || type === 'gs') { // ctx.stroke(); renderer.ctxStroke(); if (currentStyle.da) { ctx.setLineDash(this.dashResetter); } } } if (type !== 'st' && type !== 'gs') { // ctx.fill(currentStyle.r); this.globalData.renderer.ctxFill(currentStyle.r); } renderer.restore(); } } }; CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) { var i; var len = items.length - 1; var groupTransform; groupTransform = parentTransform; for (i = len; i >= 0; i -= 1) { if (items[i].ty === 'tr') { groupTransform = data[i].transform; this.renderShapeTransform(parentTransform, groupTransform); } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') { this.renderPath(items[i], data[i]); } else if (items[i].ty === 'fl') { this.renderFill(items[i], data[i], groupTransform); } else if (items[i].ty === 'st') { this.renderStroke(items[i], data[i], groupTransform); } else if (items[i].ty === 'gf' || items[i].ty === 'gs') { this.renderGradientFill(items[i], data[i], groupTransform); } else if (items[i].ty === 'gr') { this.renderShape(groupTransform, items[i].it, data[i].it); } else if (items[i].ty === 'tm') { // } } if (isMain) { this.drawLayer(); } }; CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) { if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) { var shapeNodes = styledShape.trNodes; var paths = shape.paths; var i; var len; var j; var jLen = paths._length; shapeNodes.length = 0; var groupTransformMat = styledShape.transforms.finalTransform; for (j = 0; j < jLen; j += 1) { var pathNodes = paths.shapes[j]; if (pathNodes && pathNodes.v) { len = pathNodes._length; for (i = 1; i < len; i += 1) { if (i === 1) { shapeNodes.push({ t: 'm', p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) }); } shapeNodes.push({ t: 'c', pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]) }); } if (len === 1) { shapeNodes.push({ t: 'm', p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) }); } if (pathNodes.c && len) { shapeNodes.push({ t: 'c', pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]) }); shapeNodes.push({ t: 'z' }); } } } styledShape.trNodes = shapeNodes; } }; CVShapeElement.prototype.renderPath = function (pathData, itemData) { if (pathData.hd !== true && pathData._shouldRender) { var i; var len = itemData.styledShapes.length; for (i = 0; i < len; i += 1) { this.renderStyledShape(itemData.styledShapes[i], itemData.sh); } } }; CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) { var styleElem = itemData.style; if (itemData.c._mdf || this._isFirstFrame) { styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'; } if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) { styleElem.coOp = itemData.o.v * groupTransform.opacity; } }; CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) { var styleElem = itemData.style; var grd; if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) { var ctx = this.globalData.canvasContext; var pt1 = itemData.s.v; var pt2 = itemData.e.v; if (styleData.t === 1) { grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]); } else { var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); var percent = itemData.h.v; if (percent >= 1) { percent = 0.99; } else if (percent <= -1) { percent = -0.99; } var dist = rad * percent; var x = Math.cos(ang + itemData.a.v) * dist + pt1[0]; var y = Math.sin(ang + itemData.a.v) * dist + pt1[1]; grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad); } var i; var len = styleData.g.p; var cValues = itemData.g.c; var opacity = 1; for (i = 0; i < len; i += 1) { if (itemData.g._hasOpacity && itemData.g._collapsable) { opacity = itemData.g.o[i * 2 + 1]; } grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')'); } styleElem.grd = grd; } styleElem.coOp = itemData.o.v * groupTransform.opacity; }; CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) { var styleElem = itemData.style; var d = itemData.d; if (d && (d._mdf || this._isFirstFrame)) { styleElem.da = d.dashArray; styleElem["do"] = d.dashoffset[0]; } if (itemData.c._mdf || this._isFirstFrame) { styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')'; } if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) { styleElem.coOp = itemData.o.v * groupTransform.opacity; } if (itemData.w._mdf || this._isFirstFrame) { styleElem.wi = itemData.w.v; } }; CVShapeElement.prototype.destroy = function () { this.shapesData = null; this.globalData = null; this.canvasContext = null; this.stylesList.length = 0; this.itemsData.length = 0; }; function CVTextElement(data, globalData, comp) { this.textSpans = []; this.yOffset = 0; this.fillColorAnim = false; this.strokeColorAnim = false; this.strokeWidthAnim = false; this.stroke = false; this.fill = false; this.justifyOffset = 0; this.currentRender = null; this.renderType = 'canvas'; this.values = { fill: 'rgba(0,0,0,0)', stroke: 'rgba(0,0,0,0)', sWidth: 0, fValue: '' }; this.initElement(data, globalData, comp); } extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement); CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d'); CVTextElement.prototype.buildNewText = function () { var documentData = this.textProperty.currentData; this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); var hasFill = false; if (documentData.fc) { hasFill = true; this.values.fill = this.buildColor(documentData.fc); } else { this.values.fill = 'rgba(0,0,0,0)'; } this.fill = hasFill; var hasStroke = false; if (documentData.sc) { hasStroke = true; this.values.stroke = this.buildColor(documentData.sc); this.values.sWidth = documentData.sw; } var fontData = this.globalData.fontManager.getFontByName(documentData.f); var i; var len; var letters = documentData.l; var matrixHelper = this.mHelper; this.stroke = hasStroke; this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily; len = documentData.finalText.length; // this.tHelper.font = this.values.fValue; var charData; var shapeData; var k; var kLen; var shapes; var j; var jLen; var pathNodes; var commands; var pathArr; var singleShape = this.data.singleShape; var trackingOffset = documentData.tr * 0.001 * documentData.finalSize; var xPos = 0; var yPos = 0; var firstLine = true; var cnt = 0; for (i = 0; i < len; i += 1) { charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); shapeData = charData && charData.data || {}; matrixHelper.reset(); if (singleShape && letters[i].n) { xPos = -trackingOffset; yPos += documentData.yOffset; yPos += firstLine ? 1 : 0; firstLine = false; } shapes = shapeData.shapes ? shapeData.shapes[0].it : []; jLen = shapes.length; matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); if (singleShape) { this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); } commands = createSizedArray(jLen - 1); var commandsCounter = 0; for (j = 0; j < jLen; j += 1) { if (shapes[j].ty === 'sh') { kLen = shapes[j].ks.k.i.length; pathNodes = shapes[j].ks.k; pathArr = []; for (k = 1; k < kLen; k += 1) { if (k === 1) { pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)); } 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)); } 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)); commands[commandsCounter] = pathArr; commandsCounter += 1; } } if (singleShape) { xPos += letters[i].l; xPos += trackingOffset; } if (this.textSpans[cnt]) { this.textSpans[cnt].elem = commands; } else { this.textSpans[cnt] = { elem: commands }; } cnt += 1; } }; CVTextElement.prototype.renderInnerContent = function () { this.validateText(); var ctx = this.canvasContext; ctx.font = this.values.fValue; this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt'; this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter'; this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4; if (!this.data.singleShape) { this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); } var i; var len; var j; var jLen; var k; var kLen; var renderedLetters = this.textAnimator.renderedLetters; var letters = this.textProperty.currentData.l; len = letters.length; var renderedLetter; var lastFill = null; var lastStroke = null; var lastStrokeW = null; var commands; var pathArr; var renderer = this.globalData.renderer; for (i = 0; i < len; i += 1) { if (!letters[i].n) { renderedLetter = renderedLetters[i]; if (renderedLetter) { renderer.save(); renderer.ctxTransform(renderedLetter.p); renderer.ctxOpacity(renderedLetter.o); } if (this.fill) { if (renderedLetter && renderedLetter.fc) { if (lastFill !== renderedLetter.fc) { renderer.ctxFillStyle(renderedLetter.fc); lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc; } } else if (lastFill !== this.values.fill) { lastFill = this.values.fill; renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill; } commands = this.textSpans[i].elem; jLen = commands.length; this.globalData.canvasContext.beginPath(); for (j = 0; j < jLen; j += 1) { pathArr = commands[j]; kLen = pathArr.length; this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); for (k = 2; k < kLen; k += 6) { this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]); } } this.globalData.canvasContext.closePath(); renderer.ctxFill(); // this.globalData.canvasContext.fill(); /// ctx.fillText(this.textSpans[i].val,0,0); } if (this.stroke) { if (renderedLetter && renderedLetter.sw) { if (lastStrokeW !== renderedLetter.sw) { lastStrokeW = renderedLetter.sw; renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw; } } else if (lastStrokeW !== this.values.sWidth) { lastStrokeW = this.values.sWidth; renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth; } if (renderedLetter && renderedLetter.sc) { if (lastStroke !== renderedLetter.sc) { lastStroke = renderedLetter.sc; renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc; } } else if (lastStroke !== this.values.stroke) { lastStroke = this.values.stroke; renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke; } commands = this.textSpans[i].elem; jLen = commands.length; this.globalData.canvasContext.beginPath(); for (j = 0; j < jLen; j += 1) { pathArr = commands[j]; kLen = pathArr.length; this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); for (k = 2; k < kLen; k += 6) { this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]); } } this.globalData.canvasContext.closePath(); renderer.ctxStroke(); // this.globalData.canvasContext.stroke(); /// ctx.strokeText(letters[i].val,0,0); } if (renderedLetter) { this.globalData.renderer.restore(); } } } }; function CVImageElement(data, globalData, comp) { this.assetData = globalData.getAssetData(data.refId); this.img = globalData.imageLoader.getAsset(this.assetData); this.initElement(data, globalData, comp); } extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement); CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement; CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; CVImageElement.prototype.createContent = function () { if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) { var canvas = createTag('canvas'); canvas.width = this.assetData.w; canvas.height = this.assetData.h; var ctx = canvas.getContext('2d'); var imgW = this.img.width; var imgH = this.img.height; var imgRel = imgW / imgH; var canvasRel = this.assetData.w / this.assetData.h; var widthCrop; var heightCrop; var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio; if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') { heightCrop = imgH; widthCrop = heightCrop * canvasRel; } else { widthCrop = imgW; heightCrop = widthCrop / canvasRel; } ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h); this.img = canvas; } }; CVImageElement.prototype.renderInnerContent = function () { this.canvasContext.drawImage(this.img, 0, 0); }; CVImageElement.prototype.destroy = function () { this.img = null; }; function CVSolidElement(data, globalData, comp) { this.initElement(data, globalData, comp); } extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement); CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement; CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; CVSolidElement.prototype.renderInnerContent = function () { // var ctx = this.canvasContext; this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc; this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh); // }; function CanvasRendererBase() {} extendPrototype([BaseRenderer], CanvasRendererBase); CanvasRendererBase.prototype.createShape = function (data) { return new CVShapeElement(data, this.globalData, this); }; CanvasRendererBase.prototype.createText = function (data) { return new CVTextElement(data, this.globalData, this); }; CanvasRendererBase.prototype.createImage = function (data) { return new CVImageElement(data, this.globalData, this); }; CanvasRendererBase.prototype.createSolid = function (data) { return new CVSolidElement(data, this.globalData, this); }; CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; CanvasRendererBase.prototype.ctxTransform = function (props) { if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) { return; } this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]); }; CanvasRendererBase.prototype.ctxOpacity = function (op) { this.canvasContext.globalAlpha *= op < 0 ? 0 : op; }; CanvasRendererBase.prototype.ctxFillStyle = function (value) { this.canvasContext.fillStyle = value; }; CanvasRendererBase.prototype.ctxStrokeStyle = function (value) { this.canvasContext.strokeStyle = value; }; CanvasRendererBase.prototype.ctxLineWidth = function (value) { this.canvasContext.lineWidth = value; }; CanvasRendererBase.prototype.ctxLineCap = function (value) { this.canvasContext.lineCap = value; }; CanvasRendererBase.prototype.ctxLineJoin = function (value) { this.canvasContext.lineJoin = value; }; CanvasRendererBase.prototype.ctxMiterLimit = function (value) { this.canvasContext.miterLimit = value; }; CanvasRendererBase.prototype.ctxFill = function (rule) { this.canvasContext.fill(rule); }; CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) { this.canvasContext.fillRect(x, y, w, h); }; CanvasRendererBase.prototype.ctxStroke = function () { this.canvasContext.stroke(); }; CanvasRendererBase.prototype.reset = function () { if (!this.renderConfig.clearCanvas) { this.canvasContext.restore(); return; } this.contextData.reset(); }; CanvasRendererBase.prototype.save = function () { this.canvasContext.save(); }; CanvasRendererBase.prototype.restore = function (actionFlag) { if (!this.renderConfig.clearCanvas) { this.canvasContext.restore(); return; } if (actionFlag) { this.globalData.blendMode = 'source-over'; } this.contextData.restore(actionFlag); }; CanvasRendererBase.prototype.configAnimation = function (animData) { if (this.animationItem.wrapper) { this.animationItem.container = createTag('canvas'); var containerStyle = this.animationItem.container.style; containerStyle.width = '100%'; containerStyle.height = '100%'; var origin = '0px 0px 0px'; containerStyle.transformOrigin = origin; containerStyle.mozTransformOrigin = origin; containerStyle.webkitTransformOrigin = origin; containerStyle['-webkit-transform'] = origin; containerStyle.contentVisibility = this.renderConfig.contentVisibility; this.animationItem.wrapper.appendChild(this.animationItem.container); this.canvasContext = this.animationItem.container.getContext('2d'); if (this.renderConfig.className) { this.animationItem.container.setAttribute('class', this.renderConfig.className); } if (this.renderConfig.id) { this.animationItem.container.setAttribute('id', this.renderConfig.id); } } else { this.canvasContext = this.renderConfig.context; } this.contextData.setContext(this.canvasContext); this.data = animData; this.layers = animData.layers; this.transformCanvas = { w: animData.w, h: animData.h, sx: 0, sy: 0, tx: 0, ty: 0 }; this.setupGlobalData(animData, document.body); this.globalData.canvasContext = this.canvasContext; this.globalData.renderer = this; this.globalData.isDashed = false; this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; this.globalData.transformCanvas = this.transformCanvas; this.elements = createSizedArray(animData.layers.length); this.updateContainerSize(); }; CanvasRendererBase.prototype.updateContainerSize = function (width, height) { this.reset(); var elementWidth; var elementHeight; if (width) { elementWidth = width; elementHeight = height; this.canvasContext.canvas.width = elementWidth; this.canvasContext.canvas.height = elementHeight; } else { if (this.animationItem.wrapper && this.animationItem.container) { elementWidth = this.animationItem.wrapper.offsetWidth; elementHeight = this.animationItem.wrapper.offsetHeight; } else { elementWidth = this.canvasContext.canvas.width; elementHeight = this.canvasContext.canvas.height; } this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr; this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr; } var elementRel; var animationRel; if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) { var par = this.renderConfig.preserveAspectRatio.split(' '); var fillType = par[1] || 'meet'; var pos = par[0] || 'xMidYMid'; var xPos = pos.substr(0, 4); var yPos = pos.substr(4); elementRel = elementWidth / elementHeight; animationRel = this.transformCanvas.w / this.transformCanvas.h; if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') { this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); } else { this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); } if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) { this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr; } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) { this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr; } else { this.transformCanvas.tx = 0; } if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) { this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr; } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) { this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr; } else { this.transformCanvas.ty = 0; } } else if (this.renderConfig.preserveAspectRatio === 'none') { this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); this.transformCanvas.tx = 0; this.transformCanvas.ty = 0; } else { this.transformCanvas.sx = this.renderConfig.dpr; this.transformCanvas.sy = this.renderConfig.dpr; this.transformCanvas.tx = 0; this.transformCanvas.ty = 0; } 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]; /* var i, len = this.elements.length; for(i=0;i<len;i+=1){ if(this.elements[i] && this.elements[i].data.ty === 0){ this.elements[i].resize(this.globalData.transformCanvas); } } */ this.ctxTransform(this.transformCanvas.props); this.canvasContext.beginPath(); this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h); this.canvasContext.closePath(); this.canvasContext.clip(); this.renderFrame(this.renderedFrame, true); }; CanvasRendererBase.prototype.destroy = function () { if (this.renderConfig.clearCanvas && this.animationItem.wrapper) { this.animationItem.wrapper.innerText = ''; } var i; var len = this.layers ? this.layers.length : 0; for (i = len - 1; i >= 0; i -= 1) { if (this.elements[i] && this.elements[i].destroy) { this.elements[i].destroy(); } } this.elements.length = 0; this.globalData.canvasContext = null; this.animationItem.container = null; this.destroyed = true; }; CanvasRendererBase.prototype.renderFrame = function (num, forceRender) { if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) { return; } this.renderedFrame = num; this.globalData.frameNum = num - this.animationItem._isFirstFrame; this.globalData.frameId += 1; this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender; this.globalData.projectInterface.currentFrame = num; // console.log('--------'); // console.log('NEW: ',num); var i; var len = this.layers.length; if (!this.completeLayers) { this.checkLayers(num); } for (i = len - 1; i >= 0; i -= 1) { if (this.completeLayers || this.elements[i]) { this.elements[i].prepareFrame(num - this.layers[i].st); } } if (this.globalData._mdf) { if (this.renderConfig.clearCanvas === true) { this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h); } else { this.save(); } for (i = len - 1; i >= 0; i -= 1) { if (this.completeLayers || this.elements[i]) { this.elements[i].renderFrame(); } } if (this.renderConfig.clearCanvas !== true) { this.restore(); } } }; CanvasRendererBase.prototype.buildItem = function (pos) { var elements = this.elements; if (elements[pos] || this.layers[pos].ty === 99) { return; } var element = this.createItem(this.layers[pos], this, this.globalData); elements[pos] = element; element.initExpressions(); /* if(this.layers[pos].ty === 0){ element.resize(this.globalData.transformCanvas); } */ }; CanvasRendererBase.prototype.checkPendingElements = function () { while (this.pendingElements.length) { var element = this.pendingElements.pop(); element.checkParenting(); } }; CanvasRendererBase.prototype.hide = function () { this.animationItem.container.style.display = 'none'; }; CanvasRendererBase.prototype.show = function () { this.animationItem.container.style.display = 'block'; }; function CanvasContext() { this.opacity = -1; this.transform = createTypedArray('float32', 16); this.fillStyle = ''; this.strokeStyle = ''; this.lineWidth = ''; this.lineCap = ''; this.lineJoin = ''; this.miterLimit = ''; this.id = Math.random(); } function CVContextData() { this.stack = []; this.cArrPos = 0; this.cTr = new Matrix(); var i; var len = 15; for (i = 0; i < len; i += 1) { var canvasContext = new CanvasContext(); this.stack[i] = canvasContext; } this._length = len; this.nativeContext = null; this.transformMat = new Matrix(); this.currentOpacity = 1; // this.currentFillStyle = ''; this.appliedFillStyle = ''; // this.currentStrokeStyle = ''; this.appliedStrokeStyle = ''; // this.currentLineWidth = ''; this.appliedLineWidth = ''; // this.currentLineCap = ''; this.appliedLineCap = ''; // this.currentLineJoin = ''; this.appliedLineJoin = ''; // this.appliedMiterLimit = ''; this.currentMiterLimit = ''; } CVContextData.prototype.duplicate = function () { var newLength = this._length * 2; var i = 0; for (i = this._length; i < newLength; i += 1) { this.stack[i] = new CanvasContext(); } this._length = newLength; }; CVContextData.prototype.reset = function () { this.cArrPos = 0; this.cTr.reset(); this.stack[this.cArrPos].opacity = 1; }; CVContextData.prototype.restore = function (forceRestore) { this.cArrPos -= 1; var currentContext = this.stack[this.cArrPos]; var transform = currentContext.transform; var i; var arr = this.cTr.props; for (i = 0; i < 16; i += 1) { arr[i] = transform[i]; } if (forceRestore) { this.nativeContext.restore(); var prevStack = this.stack[this.cArrPos + 1]; this.appliedFillStyle = prevStack.fillStyle; this.appliedStrokeStyle = prevStack.strokeStyle; this.appliedLineWidth = prevStack.lineWidth; this.appliedLineCap = prevStack.lineCap; this.appliedLineJoin = prevStack.lineJoin; this.appliedMiterLimit = prevStack.miterLimit; } this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]); if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) { this.nativeContext.globalAlpha = currentContext.opacity; this.currentOpacity = currentContext.opacity; } this.currentFillStyle = currentContext.fillStyle; this.currentStrokeStyle = currentContext.strokeStyle; this.currentLineWidth = currentContext.lineWidth; this.currentLineCap = currentContext.lineCap; this.currentLineJoin = currentContext.lineJoin; this.currentMiterLimit = currentContext.miterLimit; }; CVContextData.prototype.save = function (saveOnNativeFlag) { if (saveOnNativeFlag) { this.nativeContext.save(); } var props = this.cTr.props; if (this._length <= this.cArrPos) { this.duplicate(); } var currentStack = this.stack[this.cArrPos]; var i; for (i = 0; i < 16; i += 1) { currentStack.transform[i] = props[i]; } this.cArrPos += 1; var newStack = this.stack[this.cArrPos]; newStack.opacity = currentStack.opacity; newStack.fillStyle = currentStack.fillStyle; newStack.strokeStyle = currentStack.strokeStyle; newStack.lineWidth = currentStack.lineWidth; newStack.lineCap = currentStack.lineCap; newStack.lineJoin = currentStack.lineJoin; newStack.miterLimit = currentStack.miterLimit; }; CVContextData.prototype.setOpacity = function (value) { this.stack[this.cArrPos].opacity = value; }; CVContextData.prototype.setContext = function (value) { this.nativeContext = value; }; CVContextData.prototype.fillStyle = function (value) { if (this.stack[this.cArrPos].fillStyle !== value) { this.currentFillStyle = value; this.stack[this.cArrPos].fillStyle = value; } }; CVContextData.prototype.strokeStyle = function (value) { if (this.stack[this.cArrPos].strokeStyle !== value) { this.currentStrokeStyle = value; this.stack[this.cArrPos].strokeStyle = value; } }; CVContextData.prototype.lineWidth = function (value) { if (this.stack[this.cArrPos].lineWidth !== value) { this.currentLineWidth = value; this.stack[this.cArrPos].lineWidth = value; } }; CVContextData.prototype.lineCap = function (value) { if (this.stack[this.cArrPos].lineCap !== value) { this.currentLineCap = value; this.stack[this.cArrPos].lineCap = value; } }; CVContextData.prototype.lineJoin = function (value) { if (this.stack[this.cArrPos].lineJoin !== value) { this.currentLineJoin = value; this.stack[this.cArrPos].lineJoin = value; } }; CVContextData.prototype.miterLimit = function (value) { if (this.stack[this.cArrPos].miterLimit !== value) { this.currentMiterLimit = value; this.stack[this.cArrPos].miterLimit = value; } }; CVContextData.prototype.transform = function (props) { this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform currentTransform.cloneFromProps(this.transformMat.props); var trProps = currentTransform.props; // Applying the new transform to the canvas this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]); }; CVContextData.prototype.opacity = function (op) { var currentOpacity = this.stack[this.cArrPos].opacity; currentOpacity *= op < 0 ? 0 : op; if (this.stack[this.cArrPos].opacity !== currentOpacity) { if (this.currentOpacity !== op) { this.nativeContext.globalAlpha = op; this.currentOpacity = op; } this.stack[this.cArrPos].opacity = currentOpacity; } }; CVContextData.prototype.fill = function (rule) { if (this.appliedFillStyle !== this.currentFillStyle) { this.appliedFillStyle = this.currentFillStyle; this.nativeContext.fillStyle = this.appliedFillStyle; } this.nativeContext.fill(rule); }; CVContextData.prototype.fillRect = function (x, y, w, h) { if (this.appliedFillStyle !== this.currentFillStyle) { this.appliedFillStyle = this.currentFillStyle; this.nativeContext.fillStyle = this.appliedFillStyle; } this.nativeContext.fillRect(x, y, w, h); }; CVContextData.prototype.stroke = function () { if (this.appliedStrokeStyle !== this.currentStrokeStyle) { this.appliedStrokeStyle = this.currentStrokeStyle; this.nativeContext.strokeStyle = this.appliedStrokeStyle; } if (this.appliedLineWidth !== this.currentLineWidth) { this.appliedLineWidth = this.currentLineWidth; this.nativeContext.lineWidth = this.appliedLineWidth; } if (this.appliedLineCap !== this.currentLineCap) { this.appliedLineCap = this.currentLineCap; this.nativeContext.lineCap = this.appliedLineCap; } if (this.appliedLineJoin !== this.currentLineJoin) { this.appliedLineJoin = this.currentLineJoin; this.nativeContext.lineJoin = this.appliedLineJoin; } if (this.appliedMiterLimit !== this.currentMiterLimit) { this.appliedMiterLimit = this.currentMiterLimit; this.nativeContext.miterLimit = this.appliedMiterLimit; } this.nativeContext.stroke(); }; function CVCompElement(data, globalData, comp) { this.completeLayers = false; this.layers = data.layers; this.pendingElements = []; this.elements = createSizedArray(this.layers.length); this.initElement(data, globalData, comp); this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; } extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement); CVCompElement.prototype.renderInnerContent = function () { var ctx = this.canvasContext; ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(this.data.w, 0); ctx.lineTo(this.data.w, this.data.h); ctx.lineTo(0, this.data.h); ctx.lineTo(0, 0); ctx.clip(); var i; var len = this.layers.length; for (i = len - 1; i >= 0; i -= 1) { if (this.completeLayers || this.elements[i]) { this.elements[i].renderFrame(); } } }; CVCompElement.prototype.destroy = function () { var i; var len = this.layers.length; for (i = len - 1; i >= 0; i -= 1) { if (this.elements[i]) { this.elements[i].destroy(); } } this.layers = null; this.elements = null; }; CVCompElement.prototype.createComp = function (data) { return new CVCompElement(data, this.globalData, this); }; function CanvasRenderer(animationItem, config) { this.animationItem = animationItem; this.renderConfig = { clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true, context: config && config.context || null, progressiveLoad: config && config.progressiveLoad || false, preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet', imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice', contentVisibility: config && config.contentVisibility || 'visible', className: config && config.className || '', id: config && config.id || '', runExpressions: !config || config.runExpressions === undefined || config.runExpressions }; this.renderConfig.dpr = config && config.dpr || 1; if (this.animationItem.wrapper) { this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; } this.renderedFrame = -1; this.globalData = { frameNum: -1, _mdf: false, renderConfig: this.renderConfig, currentGlobalAlpha: -1 }; this.contextData = new CVContextData(); this.elements = []; this.pendingElements = []; this.transformMat = new Matrix(); this.completeLayers = false; this.rendererType = 'canvas'; if (this.renderConfig.clearCanvas) { this.ctxTransform = this.contextData.transform.bind(this.contextData); this.ctxOpacity = this.contextData.opacity.bind(this.contextData); this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData); this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData); this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData); this.ctxLineCap = this.contextData.lineCap.bind(this.contextData); this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData); this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData); this.ctxFill = this.contextData.fill.bind(this.contextData); this.ctxFillRect = this.contextData.fillRect.bind(this.contextData); this.ctxStroke = this.contextData.stroke.bind(this.contextData); this.save = this.contextData.save.bind(this.contextData); } } extendPrototype([CanvasRendererBase], CanvasRenderer); CanvasRenderer.prototype.createComp = function (data) { return new CVCompElement(data, this.globalData, this); }; function HBaseElement() {} HBaseElement.prototype = { checkBlendMode: function checkBlendMode() {}, initRendererElement: function initRendererElement() { this.baseElement = createTag(this.data.tg || 'div'); if (this.data.hasMask) { this.svgElement = createNS('svg'); this.layerElement = createNS('g'); this.maskedElement = this.layerElement; this.svgElement.appendChild(this.layerElement); this.baseElement.appendChild(this.svgElement); } else { this.layerElement = this.baseElement; } styleDiv(this.baseElement); }, createContainerElements: function createContainerElements() { this.renderableEffectsManager = new CVEffects(this); this.transformedElement = this.baseElement; this.maskedElement = this.layerElement; if (this.data.ln) { this.layerElement.setAttribute('id', this.data.ln); } if (this.data.cl) { this.layerElement.setAttribute('class', this.data.cl); } if (this.data.bm !== 0) { this.setBlendMode(); } }, renderElement: function renderElement() { var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {}; if (this.finalTransform._matMdf) { var matrixValue = this.finalTransform.mat.toCSS(); transformedElementStyle.transform = matrixValue; transformedElementStyle.webkitTransform = matrixValue; } if (this.finalTransform._opMdf) { transformedElementStyle.opacity = this.finalTransform.mProp.o.v; } }, renderFrame: function renderFrame() { // If it is exported as hidden (data.hd === true) no need to render // If it is not visible no need to render if (this.data.hd || this.hidden) { return; } this.renderTransform(); this.renderRenderable(); this.renderElement(); this.renderInnerContent(); if (this._isFirstFrame) { this._isFirstFrame = false; } }, destroy: function destroy() { this.layerElement = null; this.transformedElement = null; if (this.matteElement) { this.matteElement = null; } if (this.maskManager) { this.maskManager.destroy(); this.maskManager = null; } }, createRenderableComponents: function createRenderableComponents() { this.maskManager = new MaskElement(this.data, this, this.globalData); }, addEffects: function addEffects() {}, setMatte: function setMatte() {} }; HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement; HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy; HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting; function HSolidElement(data, globalData, comp) { this.initElement(data, globalData, comp); } extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement); HSolidElement.prototype.createContent = function () { var rect; if (this.data.hasMask) { rect = createNS('rect'); rect.setAttribute('width', this.data.sw); rect.setAttribute('height', this.data.sh); rect.setAttribute('fill', this.data.sc); this.svgElement.setAttribute('width', this.data.sw); this.svgElement.setAttribute('height', this.data.sh); } else { rect = createTag('div'); rect.style.width = this.data.sw + 'px'; rect.style.height = this.data.sh + 'px'; rect.style.backgroundColor = this.data.sc; } this.layerElement.appendChild(rect); }; function HShapeElement(data, globalData, comp) { // List of drawable elements this.shapes = []; // Full shape data this.shapesData = data.shapes; // List of styles that will be applied to shapes this.stylesList = []; // List of modifiers that will be applied to shapes this.shapeModifiers = []; // List of items in shape tree this.itemsData = []; // List of items in previous shape tree this.processedElements = []; // List of animated components this.animatedContents = []; this.shapesContainer = createNS('g'); 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. // List of elements that have been created this.prevViewData = []; this.currentBBox = { x: 999999, y: -999999, h: 0, w: 0 }; } extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement); HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent; HShapeElement.prototype.createContent = function () { var cont; this.baseElement.style.fontSize = 0; if (this.data.hasMask) { this.layerElement.appendChild(this.shapesContainer); cont = this.svgElement; } else { cont = createNS('svg'); var size = this.comp.data ? this.comp.data : this.globalData.compSize; cont.setAttribute('width', size.w); cont.setAttribute('height', size.h); cont.appendChild(this.shapesContainer); this.layerElement.appendChild(cont); } this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true); this.filterUniqueShapes(); this.shapeCont = cont; }; HShapeElement.prototype.getTransformedPoint = function (transformers, point) { var i; var len = transformers.length; for (i = 0; i < len; i += 1) { point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0); } return point; }; HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) { var shape = item.sh.v; var transformers = item.transformers; var i; var len = shape._length; var vPoint; var oPoint; var nextIPoint; var nextVPoint; if (len <= 1) { return; } for (i = 0; i < len - 1; i += 1) { vPoint = this.getTransformedPoint(transformers, shape.v[i]); oPoint = this.getTransformedPoint(transformers, shape.o[i]); nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]); nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]); this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox); } if (shape.c) { vPoint = this.getTransformedPoint(transformers, shape.v[i]); oPoint = this.getTransformedPoint(transformers, shape.o[i]); nextIPoint = this.getTransformedPoint(transformers, shape.i[0]); nextVPoint = this.getTransformedPoint(transformers, shape.v[0]); this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox); } }; HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) { this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint); var bounds = this.shapeBoundingBox; boundingBox.x = bmMin(bounds.left, boundingBox.x); boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax); boundingBox.y = bmMin(bounds.top, boundingBox.y); boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax); }; HShapeElement.prototype.shapeBoundingBox = { left: 0, right: 0, top: 0, bottom: 0 }; HShapeElement.prototype.tempBoundingBox = { x: 0, xMax: 0, y: 0, yMax: 0, width: 0, height: 0 }; HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) { var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]]; for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) { // eslint-disable-line no-plusplus b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; c = 3 * p1[i] - 3 * p0[i]; b |= 0; // eslint-disable-line no-bitwise a |= 0; // eslint-disable-line no-bitwise c |= 0; // eslint-disable-line no-bitwise if (a === 0 && b === 0) { // } else if (a === 0) { t = -c / b; if (t > 0 && t < 1) { bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i)); } } else { b2ac = b * b - 4 * c * a; if (b2ac >= 0) { t1 = (-b + bmSqrt(b2ac)) / (2 * a); if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i)); t2 = (-b - bmSqrt(b2ac)) / (2 * a); if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i)); } } } this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]); this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]); this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]); this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]); }; HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) { 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]; }; HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) { var i; var len = itemsData.length; for (i = 0; i < len; i += 1) { if (itemsData[i] && itemsData[i].sh) { this.calculateShapeBoundingBox(itemsData[i], boundingBox); } else if (itemsData[i] && itemsData[i].it) { this.calculateBoundingBox(itemsData[i].it, boundingBox); } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) { this.expandStrokeBoundingBox(itemsData[i].w, boundingBox); } } }; HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) { var width = 0; if (widthProperty.keyframes) { for (var i = 0; i < widthProperty.keyframes.length; i += 1) { var kfw = widthProperty.keyframes[i].s; if (kfw > width) { width = kfw; } } width *= widthProperty.mult; } else { width = widthProperty.v * widthProperty.mult; } boundingBox.x -= width; boundingBox.xMax += width; boundingBox.y -= width; boundingBox.yMax += width; }; HShapeElement.prototype.currentBoxContains = function (box) { 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; }; HShapeElement.prototype.renderInnerContent = function () { this._renderShapeFrame(); if (!this.hidden && (this._isFirstFrame || this._mdf)) { var tempBoundingBox = this.tempBoundingBox; var max = 999999; tempBoundingBox.x = max; tempBoundingBox.xMax = -max; tempBoundingBox.y = max; tempBoundingBox.yMax = -max; this.calculateBoundingBox(this.itemsData, tempBoundingBox); tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x; tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox(); if (this.currentBoxContains(tempBoundingBox)) { return; } var changed = false; if (this.currentBBox.w !== tempBoundingBox.width) { this.currentBBox.w = tempBoundingBox.width; this.shapeCont.setAttribute('width', tempBoundingBox.width); changed = true; } if (this.currentBBox.h !== tempBoundingBox.height) { this.currentBBox.h = tempBoundingBox.height; this.shapeCont.setAttribute('height', tempBoundingBox.height); changed = true; } if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) { this.currentBBox.w = tempBoundingBox.width; this.currentBBox.h = tempBoundingBox.height; this.currentBBox.x = tempBoundingBox.x; this.currentBBox.y = tempBoundingBox.y; this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h); var shapeStyle = this.shapeCont.style; var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)'; shapeStyle.transform = shapeTransform; shapeStyle.webkitTransform = shapeTransform; } } }; function HTextElement(data, globalData, comp) { this.textSpans = []; this.textPaths = []; this.currentBBox = { x: 999999, y: -999999, h: 0, w: 0 }; this.renderType = 'svg'; this.isMasked = false; this.initElement(data, globalData, comp); } extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement); HTextElement.prototype.createContent = function () { this.isMasked = this.checkMasks(); if (this.isMasked) { this.renderType = 'svg'; this.compW = this.comp.data.w; this.compH = this.comp.data.h; this.svgElement.setAttribute('width', this.compW); this.svgElement.setAttribute('height', this.compH); var g = createNS('g'); this.maskedElement.appendChild(g); this.innerElem = g; } else { this.renderType = 'html'; this.innerElem = this.layerElement; } this.checkParenting(); }; HTextElement.prototype.buildNewText = function () { var documentData = this.textProperty.currentData; this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); var innerElemStyle = this.innerElem.style; var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)'; innerElemStyle.fill = textColor; innerElemStyle.color = textColor; if (documentData.sc) { innerElemStyle.stroke = this.buildColor(documentData.sc); innerElemStyle.strokeWidth = documentData.sw + 'px'; } var fontData = this.globalData.fontManager.getFontByName(documentData.f); if (!this.globalData.fontManager.chars) { innerElemStyle.fontSize = documentData.finalSize + 'px'; innerElemStyle.lineHeight = documentData.finalSize + 'px'; if (fontData.fClass) { this.innerElem.className = fontData.fClass; } else { innerElemStyle.fontFamily = fontData.fFamily; var fWeight = documentData.fWeight; var fStyle = documentData.fStyle; innerElemStyle.fontStyle = fStyle; innerElemStyle.fontWeight = fWeight; } } var i; var len; var letters = documentData.l; len = letters.length; var tSpan; var tParent; var tCont; var matrixHelper = this.mHelper; var shapes; var shapeStr = ''; var cnt = 0; for (i = 0; i < len; i += 1) { if (this.globalData.fontManager.chars) { if (!this.textPaths[cnt]) { tSpan = createNS('path'); tSpan.setAttribute('stroke-linecap', lineCapEnum[1]); tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]); tSpan.setAttribute('stroke-miterlimit', '4'); } else { tSpan = this.textPaths[cnt]; } if (!this.isMasked) { if (this.textSpans[cnt]) { tParent = this.textSpans[cnt]; tCont = tParent.children[0]; } else { tParent = createTag('div'); tParent.style.lineHeight = 0; tCont = createNS('svg'); tCont.appendChild(tSpan); styleDiv(tParent); } } } else if (!this.isMasked) { if (this.textSpans[cnt]) { tParent = this.textSpans[cnt]; tSpan = this.textPaths[cnt]; } else { tParent = createTag('span'); styleDiv(tParent); tSpan = createTag('span'); styleDiv(tSpan); tParent.appendChild(tSpan); } } else { tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text'); } // tSpan.setAttribute('visibility', 'hidden'); if (this.globalData.fontManager.chars) { var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); var shapeData; if (charData) { shapeData = charData.data; } else { shapeData = null; } matrixHelper.reset(); if (shapeData && shapeData.shapes && shapeData.shapes.length) { shapes = shapeData.shapes[0].it; matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); shapeStr = this.createPathShape(matrixHelper, shapes); tSpan.setAttribute('d', shapeStr); } if (!this.isMasked) { this.innerElem.appendChild(tParent); if (shapeData && shapeData.shapes) { // document.body.appendChild is needed to get exact measure of shape document.body.appendChild(tCont); var boundingBox = tCont.getBBox(); tCont.setAttribute('width', boundingBox.width + 2); tCont.setAttribute('height', boundingBox.height + 2); tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2)); var tContStyle = tCont.style; var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)'; tContStyle.transform = tContTranslation; tContStyle.webkitTransform = tContTranslation; letters[i].yOffset = boundingBox.y - 1; } else { tCont.setAttribute('width', 1); tCont.setAttribute('height', 1); } tParent.appendChild(tCont); } else { this.innerElem.appendChild(tSpan); } } else { tSpan.textContent = letters[i].val; tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); if (!this.isMasked) { this.innerElem.appendChild(tParent); // var tStyle = tSpan.style; var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)'; tStyle.transform = tSpanTranslation; tStyle.webkitTransform = tSpanTranslation; } else { this.innerElem.appendChild(tSpan); } } // if (!this.isMasked) { this.textSpans[cnt] = tParent; } else { this.textSpans[cnt] = tSpan; } this.textSpans[cnt].style.display = 'block'; this.textPaths[cnt] = tSpan; cnt += 1; } while (cnt < this.textSpans.length) { this.textSpans[cnt].style.display = 'none'; cnt += 1; } }; HTextElement.prototype.renderInnerContent = function () { this.validateText(); var svgStyle; if (this.data.singleShape) { if (!this._isFirstFrame && !this.lettersChangedFlag) { return; } if (this.isMasked && this.finalTransform._matMdf) { // Todo Benchmark if using this is better than getBBox this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH); svgStyle = this.svgElement.style; var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)'; svgStyle.transform = translation; svgStyle.webkitTransform = translation; } } this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) { return; } var i; var len; var count = 0; var renderedLetters = this.textAnimator.renderedLetters; var letters = this.textProperty.currentData.l; len = letters.length; var renderedLetter; var textSpan; var textPath; for (i = 0; i < len; i += 1) { if (letters[i].n) { count += 1; } else { textSpan = this.textSpans[i]; textPath = this.textPaths[i]; renderedLetter = renderedLetters[count]; count += 1; if (renderedLetter._mdf.m) { if (!this.isMasked) { textSpan.style.webkitTransform = renderedLetter.m; textSpan.style.transform = renderedLetter.m; } else { textSpan.setAttribute('transform', renderedLetter.m); } } /// /textSpan.setAttribute('opacity',renderedLetter.o); textSpan.style.opacity = renderedLetter.o; if (renderedLetter.sw && renderedLetter._mdf.sw) { textPath.setAttribute('stroke-width', renderedLetter.sw); } if (renderedLetter.sc && renderedLetter._mdf.sc) { textPath.setAttribute('stroke', renderedLetter.sc); } if (renderedLetter.fc && renderedLetter._mdf.fc) { textPath.setAttribute('fill', renderedLetter.fc); textPath.style.color = renderedLetter.fc; } } } if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) { var boundingBox = this.innerElem.getBBox(); if (this.currentBBox.w !== boundingBox.width) { this.currentBBox.w = boundingBox.width; this.svgElement.setAttribute('width', boundingBox.width); } if (this.currentBBox.h !== boundingBox.height) { this.currentBBox.h = boundingBox.height; this.svgElement.setAttribute('height', boundingBox.height); } var margin = 1; 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) { 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; this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h); svgStyle = this.svgElement.style; var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)'; svgStyle.transform = svgTransform; svgStyle.webkitTransform = svgTransform; } } }; function HCameraElement(data, globalData, comp) { this.initFrame(); this.initBaseData(data, globalData, comp); this.initHierarchy(); var getProp = PropertyFactory.getProp; this.pe = getProp(this, data.pe, 0, 0, this); if (data.ks.p.s) { this.px = getProp(this, data.ks.p.x, 1, 0, this); this.py = getProp(this, data.ks.p.y, 1, 0, this); this.pz = getProp(this, data.ks.p.z, 1, 0, this); } else { this.p = getProp(this, data.ks.p, 1, 0, this); } if (data.ks.a) { this.a = getProp(this, data.ks.a, 1, 0, this); } if (data.ks.or.k.length && data.ks.or.k[0].to) { var i; var len = data.ks.or.k.length; for (i = 0; i < len; i += 1) { data.ks.or.k[i].to = null; data.ks.or.k[i].ti = null; } } this.or = getProp(this, data.ks.or, 1, degToRads, this); this.or.sh = true; this.rx = getProp(this, data.ks.rx, 0, degToRads, this); this.ry = getProp(this, data.ks.ry, 0, degToRads, this); this.rz = getProp(this, data.ks.rz, 0, degToRads, this); this.mat = new Matrix(); this._prevMat = new Matrix(); this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface. this.finalTransform = { mProp: this }; } extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement); HCameraElement.prototype.setup = function () { var i; var len = this.comp.threeDElements.length; var comp; var perspectiveStyle; var containerStyle; for (i = 0; i < len; i += 1) { // [perspectiveElem,container] comp = this.comp.threeDElements[i]; if (comp.type === '3d') { perspectiveStyle = comp.perspectiveElem.style; containerStyle = comp.container.style; var perspective = this.pe.v + 'px'; var origin = '0px 0px 0px'; var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)'; perspectiveStyle.perspective = perspective; perspectiveStyle.webkitPerspective = perspective; containerStyle.transformOrigin = origin; containerStyle.mozTransformOrigin = origin; containerStyle.webkitTransformOrigin = origin; perspectiveStyle.transform = matrix; perspectiveStyle.webkitTransform = matrix; } } }; HCameraElement.prototype.createElements = function () {}; HCameraElement.prototype.hide = function () {}; HCameraElement.prototype.renderFrame = function () { var _mdf = this._isFirstFrame; var i; var len; if (this.hierarchy) { len = this.hierarchy.length; for (i = 0; i < len; i += 1) { _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf; } } 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) { this.mat.reset(); if (this.hierarchy) { len = this.hierarchy.length - 1; for (i = len; i >= 0; i -= 1) { var mTransf = this.hierarchy[i].finalTransform.mProp; this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]); this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]); this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v); this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]); this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]); } } if (this.p) { this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]); } else { this.mat.translate(-this.px.v, -this.py.v, this.pz.v); } if (this.a) { var diffVector; if (this.p) { 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]]; } else { diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]]; } 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)); var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag]; var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]); var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ); var mRotationY = Math.atan2(lookDir[0], -lookDir[2]); this.mat.rotateY(mRotationY).rotateX(-mRotationX); } this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v); this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]); this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0); this.mat.translate(0, 0, this.pe.v); var hasMatrixChanged = !this._prevMat.equals(this.mat); if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) { len = this.comp.threeDElements.length; var comp; var perspectiveStyle; var containerStyle; for (i = 0; i < len; i += 1) { comp = this.comp.threeDElements[i]; if (comp.type === '3d') { if (hasMatrixChanged) { var matValue = this.mat.toCSS(); containerStyle = comp.container.style; containerStyle.transform = matValue; containerStyle.webkitTransform = matValue; } if (this.pe._mdf) { perspectiveStyle = comp.perspectiveElem.style; perspectiveStyle.perspective = this.pe.v + 'px'; perspectiveStyle.webkitPerspective = this.pe.v + 'px'; } } } this.mat.clone(this._prevMat); } } this._isFirstFrame = false; }; HCameraElement.prototype.prepareFrame = function (num) { this.prepareProperties(num, true); }; HCameraElement.prototype.destroy = function () {}; HCameraElement.prototype.getBaseElement = function () { return null; }; function HImageElement(data, globalData, comp) { this.assetData = globalData.getAssetData(data.refId); this.initElement(data, globalData, comp); } extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement); HImageElement.prototype.createContent = function () { var assetPath = this.globalData.getAssetsPath(this.assetData); var img = new Image(); if (this.data.hasMask) { this.imageElem = createNS('image'); this.imageElem.setAttribute('width', this.assetData.w + 'px'); this.imageElem.setAttribute('height', this.assetData.h + 'px'); this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath); this.layerElement.appendChild(this.imageElem); this.baseElement.setAttribute('width', this.assetData.w); this.baseElement.setAttribute('height', this.assetData.h); } else { this.layerElement.appendChild(img); } img.crossOrigin = 'anonymous'; img.src = assetPath; if (this.data.ln) { this.baseElement.setAttribute('id', this.data.ln); } }; function HybridRendererBase(animationItem, config) { this.animationItem = animationItem; this.layers = null; this.renderedFrame = -1; this.renderConfig = { className: config && config.className || '', imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice', hideOnTransparent: !(config && config.hideOnTransparent === false), filterSize: { width: config && config.filterSize && config.filterSize.width || '400%', height: config && config.filterSize && config.filterSize.height || '400%', x: config && config.filterSize && config.filterSize.x || '-100%', y: config && config.filterSize && config.filterSize.y || '-100%' } }; this.globalData = { _mdf: false, frameNum: -1, renderConfig: this.renderConfig }; this.pendingElements = []; this.elements = []; this.threeDElements = []; this.destroyed = false; this.camera = null; this.supports3d = true; this.rendererType = 'html'; } extendPrototype([BaseRenderer], HybridRendererBase); HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem; HybridRendererBase.prototype.checkPendingElements = function () { while (this.pendingElements.length) { var element = this.pendingElements.pop(); element.checkParenting(); } }; HybridRendererBase.prototype.appendElementInPos = function (element, pos) { var newDOMElement = element.getBaseElement(); if (!newDOMElement) { return; } var layer = this.layers[pos]; if (!layer.ddd || !this.supports3d) { if (this.threeDElements) { this.addTo3dContainer(newDOMElement, pos); } else { var i = 0; var nextDOMElement; var nextLayer; var tmpDOMElement; while (i < pos) { if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) { nextLayer = this.elements[i]; tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement(); nextDOMElement = tmpDOMElement || nextDOMElement; } i += 1; } if (nextDOMElement) { if (!layer.ddd || !this.supports3d) { this.layerElement.insertBefore(newDOMElement, nextDOMElement); } } else if (!layer.ddd || !this.supports3d) { this.layerElement.appendChild(newDOMElement); } } } else { this.addTo3dContainer(newDOMElement, pos); } }; HybridRendererBase.prototype.createShape = function (data) { if (!this.supports3d) { return new SVGShapeElement(data, this.globalData, this); } return new HShapeElement(data, this.globalData, this); }; HybridRendererBase.prototype.createText = function (data) { if (!this.supports3d) { return new SVGTextLottieElement(data, this.globalData, this); } return new HTextElement(data, this.globalData, this); }; HybridRendererBase.prototype.createCamera = function (data) { this.camera = new HCameraElement(data, this.globalData, this); return this.camera; }; HybridRendererBase.prototype.createImage = function (data) { if (!this.supports3d) { return new IImageElement(data, this.globalData, this); } return new HImageElement(data, this.globalData, this); }; HybridRendererBase.prototype.createSolid = function (data) { if (!this.supports3d) { return new ISolidElement(data, this.globalData, this); } return new HSolidElement(data, this.globalData, this); }; HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) { var i = 0; var len = this.threeDElements.length; while (i < len) { if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) { return this.threeDElements[i].perspectiveElem; } i += 1; } return null; }; HybridRendererBase.prototype.createThreeDContainer = function (pos, type) { var perspectiveElem = createTag('div'); var style; var containerStyle; styleDiv(perspectiveElem); var container = createTag('div'); styleDiv(container); if (type === '3d') { style = perspectiveElem.style; style.width = this.globalData.compSize.w + 'px'; style.height = this.globalData.compSize.h + 'px'; var center = '50% 50%'; style.webkitTransformOrigin = center; style.mozTransformOrigin = center; style.transformOrigin = center; containerStyle = container.style; var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)'; containerStyle.transform = matrix; containerStyle.webkitTransform = matrix; } perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem); var threeDContainerData = { container: container, perspectiveElem: perspectiveElem, startPos: pos, endPos: pos, type: type }; this.threeDElements.push(threeDContainerData); return threeDContainerData; }; HybridRendererBase.prototype.build3dContainers = function () { var i; var len = this.layers.length; var lastThreeDContainerData; var currentContainer = ''; for (i = 0; i < len; i += 1) { if (this.layers[i].ddd && this.layers[i].ty !== 3) { if (currentContainer !== '3d') { currentContainer = '3d'; lastThreeDContainerData = this.createThreeDContainer(i, '3d'); } lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i); } else { if (currentContainer !== '2d') { currentContainer = '2d'; lastThreeDContainerData = this.createThreeDContainer(i, '2d'); } lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i); } } len = this.threeDElements.length; for (i = len - 1; i >= 0; i -= 1) { this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem); } }; HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) { var i = 0; var len = this.threeDElements.length; while (i < len) { if (pos <= this.threeDElements[i].endPos) { var j = this.threeDElements[i].startPos; var nextElement; while (j < pos) { if (this.elements[j] && this.elements[j].getBaseElement) { nextElement = this.elements[j].getBaseElement(); } j += 1; } if (nextElement) { this.threeDElements[i].container.insertBefore(elem, nextElement); } else { this.threeDElements[i].container.appendChild(elem); } break; } i += 1; } }; HybridRendererBase.prototype.configAnimation = function (animData) { var resizerElem = createTag('div'); var wrapper = this.animationItem.wrapper; var style = resizerElem.style; style.width = animData.w + 'px'; style.height = animData.h + 'px'; this.resizerElem = resizerElem; styleDiv(resizerElem); style.transformStyle = 'flat'; style.mozTransformStyle = 'flat'; style.webkitTransformStyle = 'flat'; if (this.renderConfig.className) { resizerElem.setAttribute('class', this.renderConfig.className); } wrapper.appendChild(resizerElem); style.overflow = 'hidden'; var svg = createNS('svg'); svg.setAttribute('width', '1'); svg.setAttribute('height', '1'); styleDiv(svg); this.resizerElem.appendChild(svg); var defs = createNS('defs'); svg.appendChild(defs); this.data = animData; // Mask animation this.setupGlobalData(animData, svg); this.globalData.defs = defs; this.layers = animData.layers; this.layerElement = this.resizerElem; this.build3dContainers(); this.updateContainerSize(); }; HybridRendererBase.prototype.destroy = function () { if (this.animationItem.wrapper) { this.animationItem.wrapper.innerText = ''; } this.animationItem.container = null; this.globalData.defs = null; var i; var len = this.layers ? this.layers.length : 0; for (i = 0; i < len; i += 1) { if (this.elements[i] && this.elements[i].destroy) { this.elements[i].destroy(); } } this.elements.length = 0; this.destroyed = true; this.animationItem = null; }; HybridRendererBase.prototype.updateContainerSize = function () { var elementWidth = this.animationItem.wrapper.offsetWidth; var elementHeight = this.animationItem.wrapper.offsetHeight; var elementRel = elementWidth / elementHeight; var animationRel = this.globalData.compSize.w / this.globalData.compSize.h; var sx; var sy; var tx; var ty; if (animationRel > elementRel) { sx = elementWidth / this.globalData.compSize.w; sy = elementWidth / this.globalData.compSize.w; tx = 0; ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2; } else { sx = elementHeight / this.globalData.compSize.h; sy = elementHeight / this.globalData.compSize.h; tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2; ty = 0; } var style = this.resizerElem.style; style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)'; style.transform = style.webkitTransform; }; HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame; HybridRendererBase.prototype.hide = function () { this.resizerElem.style.display = 'none'; }; HybridRendererBase.prototype.show = function () { this.resizerElem.style.display = 'block'; }; HybridRendererBase.prototype.initItems = function () { this.buildAllItems(); if (this.camera) { this.camera.setup(); } else { var cWidth = this.globalData.compSize.w; var cHeight = this.globalData.compSize.h; var i; var len = this.threeDElements.length; for (i = 0; i < len; i += 1) { var style = this.threeDElements[i].perspectiveElem.style; style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px'; style.perspective = style.webkitPerspective; } } }; HybridRendererBase.prototype.searchExtraCompositions = function (assets) { var i; var len = assets.length; var floatingContainer = createTag('div'); for (i = 0; i < len; i += 1) { if (assets[i].xt) { var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null); comp.initExpressions(); this.globalData.projectInterface.registerComposition(comp); } } }; function HCompElement(data, globalData, comp) { this.layers = data.layers; this.supports3d = !data.hasMask; this.completeLayers = false; this.pendingElements = []; this.elements = this.layers ? createSizedArray(this.layers.length) : []; this.initElement(data, globalData, comp); this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; } extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement); HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements; HCompElement.prototype.createContainerElements = function () { this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)'; if (this.data.hasMask) { this.svgElement.setAttribute('width', this.data.w); this.svgElement.setAttribute('height', this.data.h); this.transformedElement = this.baseElement; } else { this.transformedElement = this.layerElement; } }; HCompElement.prototype.addTo3dContainer = function (elem, pos) { var j = 0; var nextElement; while (j < pos) { if (this.elements[j] && this.elements[j].getBaseElement) { nextElement = this.elements[j].getBaseElement(); } j += 1; } if (nextElement) { this.layerElement.insertBefore(elem, nextElement); } else { this.layerElement.appendChild(elem); } }; HCompElement.prototype.createComp = function (data) { if (!this.supports3d) { return new SVGCompElement(data, this.globalData, this); } return new HCompElement(data, this.globalData, this); }; function HybridRenderer(animationItem, config) { this.animationItem = animationItem; this.layers = null; this.renderedFrame = -1; this.renderConfig = { className: config && config.className || '', imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice', hideOnTransparent: !(config && config.hideOnTransparent === false), filterSize: { width: config && config.filterSize && config.filterSize.width || '400%', height: config && config.filterSize && config.filterSize.height || '400%', x: config && config.filterSize && config.filterSize.x || '-100%', y: config && config.filterSize && config.filterSize.y || '-100%' }, runExpressions: !config || config.runExpressions === undefined || config.runExpressions }; this.globalData = { _mdf: false, frameNum: -1, renderConfig: this.renderConfig }; this.pendingElements = []; this.elements = []; this.threeDElements = []; this.destroyed = false; this.camera = null; this.supports3d = true; this.rendererType = 'html'; } extendPrototype([HybridRendererBase], HybridRenderer); HybridRenderer.prototype.createComp = function (data) { if (!this.supports3d) { return new SVGCompElement(data, this.globalData, this); } return new HCompElement(data, this.globalData, this); }; var CompExpressionInterface = function () { return function (comp) { function _thisLayerFunction(name) { var i = 0; var len = comp.layers.length; while (i < len) { if (comp.layers[i].nm === name || comp.layers[i].ind === name) { return comp.elements[i].layerInterface; } i += 1; } return null; // return {active:false}; } Object.defineProperty(_thisLayerFunction, '_name', { value: comp.data.nm }); _thisLayerFunction.layer = _thisLayerFunction; _thisLayerFunction.pixelAspect = 1; _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h; _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w; _thisLayerFunction.pixelAspect = 1; _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate; _thisLayerFunction.displayStartTime = 0; _thisLayerFunction.numLayers = comp.layers.length; return _thisLayerFunction; }; }(); function _typeof$2(o) { "@babel/helpers - typeof"; return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$2(o); } /* eslint-disable */ /* Copyright 2014 David Bau. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ function seedRandom(pool, math) { // // The following constants are related to IEEE 754 limits. // var global = this, width = 256, // each RC4 output is 0 <= x < 256 chunks = 6, // at least six RC4 outputs for each double digits = 52, // there are 52 significant digits in a double rngname = 'random', // rngname: name for Math.random and Math.seedrandom startdenom = math.pow(width, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask = width - 1, nodecrypto; // node.js crypto module, initialized at the bottom. // // seedrandom() // This is the seedrandom function described above. // function seedrandom(seed, options, callback) { var key = []; options = options === true ? { entropy: true } : options || {}; // Flatten the seed string or build one from local entropy if needed. var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator. var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains // randomness in every bit of the mantissa of the IEEE 754 value. var prng = function prng() { var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48 d = startdenom, // and denominator d = 2 ^ 48. x = 0; // and no 'extra last byte'. while (n < significance) { // Fill up all significant digits by n = (n + x) * width; // shifting numerator and d *= width; // denominator and generating a x = arc4.g(1); // new least-significant-byte. } while (n >= overflow) { // To avoid rounding up, before adding n /= 2; // last byte, shift everything d /= 2; // right using integer math until x >>>= 1; // we have exactly the desired bits. } return (n + x) / d; // Form the number within [0, 1). }; prng.int32 = function () { return arc4.g(4) | 0; }; prng.quick = function () { return arc4.g(4) / 0x100000000; }; prng["double"] = prng; // Mix the randomness into accumulated entropy. mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math. return (options.pass || callback || function (prng, seed, is_math_call, state) { if (state) { // Load the arc4 state from the given state if it has an S array. if (state.S) { copy(state, arc4); } // Only provide the .state method if requested via options.state. prng.state = function () { return copy(arc4, {}); }; } // If called as a method of Math (Math.seedrandom()), mutate // Math.random because that is how seedrandom.js has worked since v1.0. if (is_math_call) { math[rngname] = prng; return seed; } // Otherwise, it is a newer calling convention, so return the // prng directly. else return prng; })(prng, shortseed, 'global' in options ? options.global : this == math, options.state); } math['seed' + rngname] = seedrandom; // // ARC4 // // An ARC4 implementation. The constructor takes a key in the form of // an array of at most (width) integers that should be 0 <= x < (width). // // The g(count) method returns a pseudorandom integer that concatenates // the next (count) outputs from ARC4. Its return value is a number x // that is in the range 0 <= x < (width ^ count). // function ARC4(key) { var t, keylen = key.length, me = this, i = 0, j = me.i = me.j = 0, s = me.S = []; // The empty key [] is treated as [0]. if (!keylen) { key = [keylen++]; } // Set up S using the standard key scheduling algorithm. while (i < width) { s[i] = i++; } for (i = 0; i < width; i++) { s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])]; s[j] = t; } // The "g" method returns the next (count) outputs as one number. me.g = function (count) { // Using instance members instead of closure state nearly doubles speed. var t, r = 0, i = me.i, j = me.j, s = me.S; while (count--) { t = s[i = mask & i + 1]; r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)]; } me.i = i; me.j = j; return r; // For robust unpredictability, the function call below automatically // discards an initial batch of values. This is called RC4-drop[256]. // See http://google.com/search?q=rsa+fluhrer+response&btnI }; } // // copy() // Copies internal state of ARC4 to or from a plain object. // function copy(f, t) { t.i = f.i; t.j = f.j; t.S = f.S.slice(); return t; } // // flatten() // Converts an object tree to nested arrays of strings. // function flatten(obj, depth) { var result = [], typ = _typeof$2(obj), prop; if (depth && typ == 'object') { for (prop in obj) { try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {} } } return result.length ? result : typ == 'string' ? obj : obj + '\0'; } // // mixkey() // Mixes a string seed into a key that is an array of integers, and // returns a shortened string seed that is equivalent to the result key. // function mixkey(seed, key) { var stringseed = seed + '', smear, j = 0; while (j < stringseed.length) { key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++); } return tostring(key); } // // autoseed() // Returns an object for autoseeding, using window.crypto and Node crypto // module if available. // function autoseed() { try { if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); } var out = new Uint8Array(width); (global.crypto || global.msCrypto).getRandomValues(out); return tostring(out); } catch (e) { var browser = global.navigator, plugins = browser && browser.plugins; return [+new Date(), global, plugins, global.screen, tostring(pool)]; } } // // tostring() // Converts an array of charcodes to a string // function tostring(a) { return String.fromCharCode.apply(0, a); } // // When seedrandom.js is loaded, we immediately mix a few bits // from the built-in RNG into the entropy pool. Because we do // not want to interfere with deterministic PRNG state later, // seedrandom will not call math.random on its own again after // initialization. // mixkey(math.random(), pool); // // Nodejs and AMD support: export the implementation as a module using // either convention. // // End anonymous scope, and pass initial values. } ; function initialize$2(BMMath) { seedRandom([], BMMath); } var propTypes = { SHAPE: 'shape' }; function _typeof$1(o) { "@babel/helpers - typeof"; return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$1(o); } var ExpressionManager = function () { 'use strict'; var ob = {}; var Math = BMMath; var window = null; var document = null; var XMLHttpRequest = null; var fetch = null; var frames = null; var _lottieGlobal = {}; initialize$2(BMMath); function resetFrame() { _lottieGlobal = {}; } function $bm_isInstanceOfArray(arr) { return arr.constructor === Array || arr.constructor === Float32Array; } function isNumerable(tOfV, v) { return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string'; } function $bm_neg(a) { var tOfA = _typeof$1(a); if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') { return -a; } if ($bm_isInstanceOfArray(a)) { var i; var lenA = a.length; var retArr = []; for (i = 0; i < lenA; i += 1) { retArr[i] = -a[i]; } return retArr; } if (a.propType) { return a.v; } return -a; } var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get; var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get; var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get; function sum(a, b) { var tOfA = _typeof$1(a); var tOfB = _typeof$1(b); if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') { return a + b; } if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { a = a.slice(0); a[0] += b; return a; } if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { b = b.slice(0); b[0] = a + b[0]; return b; } if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) { var i = 0; var lenA = a.length; var lenB = b.length; var retArr = []; while (i < lenA || i < lenB) { if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) { retArr[i] = a[i] + b[i]; } else { retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i]; } i += 1; } return retArr; } return 0; } var add = sum; function sub(a, b) { var tOfA = _typeof$1(a); var tOfB = _typeof$1(b); if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) { if (tOfA === 'string') { a = parseInt(a, 10); } if (tOfB === 'string') { b = parseInt(b, 10); } return a - b; } if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { a = a.slice(0); a[0] -= b; return a; } if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { b = b.slice(0); b[0] = a - b[0]; return b; } if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) { var i = 0; var lenA = a.length; var lenB = b.length; var retArr = []; while (i < lenA || i < lenB) { if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) { retArr[i] = a[i] - b[i]; } else { retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i]; } i += 1; } return retArr; } return 0; } function mul(a, b) { var tOfA = _typeof$1(a); var tOfB = _typeof$1(b); var arr; if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) { return a * b; } var i; var len; if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { len = a.length; arr = createTypedArray('float32', len); for (i = 0; i < len; i += 1) { arr[i] = a[i] * b; } return arr; } if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { len = b.length; arr = createTypedArray('float32', len); for (i = 0; i < len; i += 1) { arr[i] = a * b[i]; } return arr; } return 0; } function div(a, b) { var tOfA = _typeof$1(a); var tOfB = _typeof$1(b); var arr; if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) { return a / b; } var i; var len; if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { len = a.length; arr = createTypedArray('float32', len); for (i = 0; i < len; i += 1) { arr[i] = a[i] / b; } return arr; } if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { len = b.length; arr = createTypedArray('float32', len); for (i = 0; i < len; i += 1) { arr[i] = a / b[i]; } return arr; } return 0; } function mod(a, b) { if (typeof a === 'string') { a = parseInt(a, 10); } if (typeof b === 'string') { b = parseInt(b, 10); } return a % b; } var $bm_sum = sum; var $bm_sub = sub; var $bm_mul = mul; var $bm_div = div; var $bm_mod = mod; function clamp(num, min, max) { if (min > max) { var mm = max; max = min; min = mm; } return Math.min(Math.max(num, min), max); } function radiansToDegrees(val) { return val / degToRads; } var radians_to_degrees = radiansToDegrees; function degreesToRadians(val) { return val * degToRads; } var degrees_to_radians = radiansToDegrees; var helperLengthArray = [0, 0, 0, 0, 0, 0]; function length(arr1, arr2) { if (typeof arr1 === 'number' || arr1 instanceof Number) { arr2 = arr2 || 0; return Math.abs(arr1 - arr2); } if (!arr2) { arr2 = helperLengthArray; } var i; var len = Math.min(arr1.length, arr2.length); var addedLength = 0; for (i = 0; i < len; i += 1) { addedLength += Math.pow(arr2[i] - arr1[i], 2); } return Math.sqrt(addedLength); } function normalize(vec) { return div(vec, length(vec)); } function rgbToHsl(val) { var r = val[0]; var g = val[1]; var b = val[2]; var max = Math.max(r, g, b); var min = Math.min(r, g, b); var h; var s; var l = (max + min) / 2; if (max === min) { h = 0; // achromatic s = 0; // achromatic } else { var d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); switch (max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; default: break; } h /= 6; } return [h, s, l, val[3]]; } function hue2rgb(p, q, t) { if (t < 0) t += 1; if (t > 1) t -= 1; if (t < 1 / 6) return p + (q - p) * 6 * t; if (t < 1 / 2) return q; if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; return p; } function hslToRgb(val) { var h = val[0]; var s = val[1]; var l = val[2]; var r; var g; var b; if (s === 0) { r = l; // achromatic b = l; // achromatic g = l; // achromatic } else { var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hue2rgb(p, q, h + 1 / 3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1 / 3); } return [r, g, b, val[3]]; } function linear(t, tMin, tMax, value1, value2) { if (value1 === undefined || value2 === undefined) { value1 = tMin; value2 = tMax; tMin = 0; tMax = 1; } if (tMax < tMin) { var _tMin = tMax; tMax = tMin; tMin = _tMin; } if (t <= tMin) { return value1; } if (t >= tMax) { return value2; } var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin); if (!value1.length) { return value1 + (value2 - value1) * perc; } var i; var len = value1.length; var arr = createTypedArray('float32', len); for (i = 0; i < len; i += 1) { arr[i] = value1[i] + (value2[i] - value1[i]) * perc; } return arr; } function random(min, max) { if (max === undefined) { if (min === undefined) { min = 0; max = 1; } else { max = min; min = undefined; } } if (max.length) { var i; var len = max.length; if (!min) { min = createTypedArray('float32', len); } var arr = createTypedArray('float32', len); var rnd = BMMath.random(); for (i = 0; i < len; i += 1) { arr[i] = min[i] + rnd * (max[i] - min[i]); } return arr; } if (min === undefined) { min = 0; } var rndm = BMMath.random(); return min + rndm * (max - min); } function createPath(points, inTangents, outTangents, closed) { var i; var len = points.length; var path = shapePool.newElement(); path.setPathData(!!closed, len); var arrPlaceholder = [0, 0]; var inVertexPoint; var outVertexPoint; for (i = 0; i < len; i += 1) { inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder; outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder; 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); } return path; } function initiateExpression(elem, data, property) { // Bail out if we don't want expressions function noOp(_value) { return _value; } if (!elem.globalData.renderConfig.runExpressions) { return noOp; } var val = data.x; var needsVelocity = /velocity(?![\w\d])/.test(val); var _needsRandom = val.indexOf('random') !== -1; var elemType = elem.data.ty; var transform; var $bm_transform; var content; var effect; var thisProperty = property; thisProperty._name = elem.data.nm; thisProperty.valueAtTime = thisProperty.getValueAtTime; Object.defineProperty(thisProperty, 'value', { get: function get() { return thisProperty.v; } }); elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate; elem.comp.displayStartTime = 0; var inPoint = elem.data.ip / elem.comp.globalData.frameRate; var outPoint = elem.data.op / elem.comp.globalData.frameRate; var width = elem.data.sw ? elem.data.sw : 0; var height = elem.data.sh ? elem.data.sh : 0; var name = elem.data.nm; var loopIn; var loop_in; var loopOut; var loop_out; var smooth; var toWorld; var fromWorld; var fromComp; var toComp; var fromCompToSurface; var position; var rotation; var anchorPoint; var scale; var thisLayer; var thisComp; var mask; var valueAtTime; var velocityAtTime; var scoped_bm_rt; // val = val.replace(/(\\?"|')((http)(s)?(:\/))?\/.*?(\\?"|')/g, "\"\""); // deter potential network calls var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval var numKeys = property.kf ? data.k.length : 0; var active = !this.data || this.data.hd !== true; var wiggle = function wiggle(freq, amp) { var iWiggle; var j; var lenWiggle = this.pv.length ? this.pv.length : 1; var addedAmps = createTypedArray('float32', lenWiggle); freq = 5; var iterations = Math.floor(time * freq); iWiggle = 0; j = 0; while (iWiggle < iterations) { // var rnd = BMMath.random(); for (j = 0; j < lenWiggle; j += 1) { addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd; } iWiggle += 1; } // var rnd2 = BMMath.random(); var periods = time * freq; var perc = periods - Math.floor(periods); var arr = createTypedArray('float32', lenWiggle); if (lenWiggle > 1) { for (j = 0; j < lenWiggle; j += 1) { 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; // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc); } return arr; } return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc; }.bind(this); if (thisProperty.loopIn) { loopIn = thisProperty.loopIn.bind(thisProperty); loop_in = loopIn; } if (thisProperty.loopOut) { loopOut = thisProperty.loopOut.bind(thisProperty); loop_out = loopOut; } if (thisProperty.smooth) { smooth = thisProperty.smooth.bind(thisProperty); } function loopInDuration(type, duration) { return loopIn(type, duration, true); } function loopOutDuration(type, duration) { return loopOut(type, duration, true); } if (this.getValueAtTime) { valueAtTime = this.getValueAtTime.bind(this); } if (this.getVelocityAtTime) { velocityAtTime = this.getVelocityAtTime.bind(this); } var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface); function lookAt(elem1, elem2) { var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]]; var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads; var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads; return [yaw, pitch, 0]; } function easeOut(t, tMin, tMax, val1, val2) { return applyEase(easeOutBez, t, tMin, tMax, val1, val2); } function easeIn(t, tMin, tMax, val1, val2) { return applyEase(easeInBez, t, tMin, tMax, val1, val2); } function ease(t, tMin, tMax, val1, val2) { return applyEase(easeInOutBez, t, tMin, tMax, val1, val2); } function applyEase(fn, t, tMin, tMax, val1, val2) { if (val1 === undefined) { val1 = tMin; val2 = tMax; } else { t = (t - tMin) / (tMax - tMin); } if (t > 1) { t = 1; } else if (t < 0) { t = 0; } var mult = fn(t); if ($bm_isInstanceOfArray(val1)) { var iKey; var lenKey = val1.length; var arr = createTypedArray('float32', lenKey); for (iKey = 0; iKey < lenKey; iKey += 1) { arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey]; } return arr; } return (val2 - val1) * mult + val1; } function nearestKey(time) { var iKey; var lenKey = data.k.length; var index; var keyTime; if (!data.k.length || typeof data.k[0] === 'number') { index = 0; keyTime = 0; } else { index = -1; time *= elem.comp.globalData.frameRate; if (time < data.k[0].t) { index = 1; keyTime = data.k[0].t; } else { for (iKey = 0; iKey < lenKey - 1; iKey += 1) { if (time === data.k[iKey].t) { index = iKey + 1; keyTime = data.k[iKey].t; break; } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) { if (time - data.k[iKey].t > data.k[iKey + 1].t - time) { index = iKey + 2; keyTime = data.k[iKey + 1].t; } else { index = iKey + 1; keyTime = data.k[iKey].t; } break; } } if (index === -1) { index = iKey + 1; keyTime = data.k[iKey].t; } } } var obKey = {}; obKey.index = index; obKey.time = keyTime / elem.comp.globalData.frameRate; return obKey; } function key(ind) { var obKey; var iKey; var lenKey; if (!data.k.length || typeof data.k[0] === 'number') { throw new Error('The property has no keyframe at index ' + ind); } ind -= 1; obKey = { time: data.k[ind].t / elem.comp.globalData.frameRate, value: [] }; var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e; lenKey = arr.length; for (iKey = 0; iKey < lenKey; iKey += 1) { obKey[iKey] = arr[iKey]; obKey.value[iKey] = arr[iKey]; } return obKey; } function framesToTime(fr, fps) { if (!fps) { fps = elem.comp.globalData.frameRate; } return fr / fps; } function timeToFrames(t, fps) { if (!t && t !== 0) { t = time; } if (!fps) { fps = elem.comp.globalData.frameRate; } return t * fps; } function seedRandom(seed) { BMMath.seedrandom(randSeed + seed); } function sourceRectAtTime() { return elem.sourceRectAtTime(); } function substring(init, end) { if (typeof value === 'string') { if (end === undefined) { return value.substring(init); } return value.substring(init, end); } return ''; } function substr(init, end) { if (typeof value === 'string') { if (end === undefined) { return value.substr(init); } return value.substr(init, end); } return ''; } function posterizeTime(framesPerSecond) { time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond; value = valueAtTime(time); } var time; var velocity; var value; var text; var textIndex; var textTotal; var selectorValue; var index = elem.data.ind; var hasParent = !!(elem.hierarchy && elem.hierarchy.length); var parent; var randSeed = Math.floor(Math.random() * 1000000); var globalData = elem.globalData; function executeExpression(_value) { // globalData.pushExpression(); value = _value; if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') { return value; } if (this.propType === 'textSelector') { textIndex = this.textIndex; textTotal = this.textTotal; selectorValue = this.selectorValue; } if (!thisLayer) { text = elem.layerInterface.text; thisLayer = elem.layerInterface; thisComp = elem.comp.compInterface; toWorld = thisLayer.toWorld.bind(thisLayer); fromWorld = thisLayer.fromWorld.bind(thisLayer); fromComp = thisLayer.fromComp.bind(thisLayer); toComp = thisLayer.toComp.bind(thisLayer); mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null; fromCompToSurface = fromComp; } if (!transform) { transform = elem.layerInterface('ADBE Transform Group'); $bm_transform = transform; if (transform) { anchorPoint = transform.anchorPoint; /* position = transform.position; rotation = transform.rotation; scale = transform.scale; */ } } if (elemType === 4 && !content) { content = thisLayer('ADBE Root Vectors Group'); } if (!effect) { effect = thisLayer(4); } hasParent = !!(elem.hierarchy && elem.hierarchy.length); if (hasParent && !parent) { parent = elem.hierarchy[0].layerInterface; } time = this.comp.renderedFrame / this.comp.globalData.frameRate; if (_needsRandom) { seedRandom(randSeed + time); } if (needsVelocity) { velocity = velocityAtTime(time); } expression_function(); this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value // Changed this to a ternary operation because Rollup failed compiling it correctly scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt; return scoped_bm_rt; } // Bundlers will see these as dead code and unless we reference them 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]; return executeExpression; } ob.initiateExpression = initiateExpression; ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal]; ob.resetFrame = resetFrame; return ob; }(); var Expressions = function () { var ob = {}; ob.initExpressions = initExpressions; ob.resetFrame = ExpressionManager.resetFrame; function initExpressions(animation) { var stackCount = 0; var registers = []; function pushExpression() { stackCount += 1; } function popExpression() { stackCount -= 1; if (stackCount === 0) { releaseInstances(); } } function registerExpressionProperty(expression) { if (registers.indexOf(expression) === -1) { registers.push(expression); } } function releaseInstances() { var i; var len = registers.length; for (i = 0; i < len; i += 1) { registers[i].release(); } registers.length = 0; } animation.renderer.compInterface = CompExpressionInterface(animation.renderer); animation.renderer.globalData.projectInterface.registerComposition(animation.renderer); animation.renderer.globalData.pushExpression = pushExpression; animation.renderer.globalData.popExpression = popExpression; animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty; } return ob; }(); var MaskManagerInterface = function () { function MaskInterface(mask, data) { this._mask = mask; this._data = data; } Object.defineProperty(MaskInterface.prototype, 'maskPath', { get: function get() { if (this._mask.prop.k) { this._mask.prop.getValue(); } return this._mask.prop; } }); Object.defineProperty(MaskInterface.prototype, 'maskOpacity', { get: function get() { if (this._mask.op.k) { this._mask.op.getValue(); } return this._mask.op.v * 100; } }); var MaskManager = function MaskManager(maskManager) { var _masksInterfaces = createSizedArray(maskManager.viewData.length); var i; var len = maskManager.viewData.length; for (i = 0; i < len; i += 1) { _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]); } var maskFunction = function maskFunction(name) { i = 0; while (i < len) { if (maskManager.masksProperties[i].nm === name) { return _masksInterfaces[i]; } i += 1; } return null; }; return maskFunction; }; return MaskManager; }(); var ExpressionPropertyInterface = function () { var defaultUnidimensionalValue = { pv: 0, v: 0, mult: 1 }; var defaultMultidimensionalValue = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 }; function completeProperty(expressionValue, property, type) { Object.defineProperty(expressionValue, 'velocity', { get: function get() { return property.getVelocityAtTime(property.comp.currentFrame); } }); expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0; expressionValue.key = function (pos) { if (!expressionValue.numKeys) { return 0; } var value = ''; if ('s' in property.keyframes[pos - 1]) { value = property.keyframes[pos - 1].s; } else if ('e' in property.keyframes[pos - 2]) { value = property.keyframes[pos - 2].e; } else { value = property.keyframes[pos - 2].s; } var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate; valueProp.value = type === 'unidimensional' ? value[0] : value; return valueProp; }; expressionValue.valueAtTime = property.getValueAtTime; expressionValue.speedAtTime = property.getSpeedAtTime; expressionValue.velocityAtTime = property.getVelocityAtTime; expressionValue.propertyGroup = property.propertyGroup; } function UnidimensionalPropertyInterface(property) { if (!property || !('pv' in property)) { property = defaultUnidimensionalValue; } var mult = 1 / property.mult; var val = property.pv * mult; var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers expressionValue.value = val; completeProperty(expressionValue, property, 'unidimensional'); return function () { if (property.k) { property.getValue(); } val = property.v * mult; if (expressionValue.value !== val) { expressionValue = new Number(val); // eslint-disable-line no-new-wrappers expressionValue.value = val; expressionValue[0] = val; completeProperty(expressionValue, property, 'unidimensional'); } return expressionValue; }; } function MultidimensionalPropertyInterface(property) { if (!property || !('pv' in property)) { property = defaultMultidimensionalValue; } var mult = 1 / property.mult; var len = property.data && property.data.l || property.pv.length; var expressionValue = createTypedArray('float32', len); var arrValue = createTypedArray('float32', len); expressionValue.value = arrValue; completeProperty(expressionValue, property, 'multidimensional'); return function () { if (property.k) { property.getValue(); } for (var i = 0; i < len; i += 1) { arrValue[i] = property.v[i] * mult; expressionValue[i] = arrValue[i]; } return expressionValue; }; } // TODO: try to avoid using this getter function defaultGetter() { return defaultUnidimensionalValue; } return function (property) { if (!property) { return defaultGetter; } if (property.propType === 'unidimensional') { return UnidimensionalPropertyInterface(property); } return MultidimensionalPropertyInterface(property); }; }(); var TransformExpressionInterface = function () { return function (transform) { function _thisFunction(name) { switch (name) { case 'scale': case 'Scale': case 'ADBE Scale': case 6: return _thisFunction.scale; case 'rotation': case 'Rotation': case 'ADBE Rotation': case 'ADBE Rotate Z': case 10: return _thisFunction.rotation; case 'ADBE Rotate X': return _thisFunction.xRotation; case 'ADBE Rotate Y': return _thisFunction.yRotation; case 'position': case 'Position': case 'ADBE Position': case 2: return _thisFunction.position; case 'ADBE Position_0': return _thisFunction.xPosition; case 'ADBE Position_1': return _thisFunction.yPosition; case 'ADBE Position_2': return _thisFunction.zPosition; case 'anchorPoint': case 'AnchorPoint': case 'Anchor Point': case 'ADBE AnchorPoint': case 1: return _thisFunction.anchorPoint; case 'opacity': case 'Opacity': case 11: return _thisFunction.opacity; default: return null; } } Object.defineProperty(_thisFunction, 'rotation', { get: ExpressionPropertyInterface(transform.r || transform.rz) }); Object.defineProperty(_thisFunction, 'zRotation', { get: ExpressionPropertyInterface(transform.rz || transform.r) }); Object.defineProperty(_thisFunction, 'xRotation', { get: ExpressionPropertyInterface(transform.rx) }); Object.defineProperty(_thisFunction, 'yRotation', { get: ExpressionPropertyInterface(transform.ry) }); Object.defineProperty(_thisFunction, 'scale', { get: ExpressionPropertyInterface(transform.s) }); var _px; var _py; var _pz; var _transformFactory; if (transform.p) { _transformFactory = ExpressionPropertyInterface(transform.p); } else { _px = ExpressionPropertyInterface(transform.px); _py = ExpressionPropertyInterface(transform.py); if (transform.pz) { _pz = ExpressionPropertyInterface(transform.pz); } } Object.defineProperty(_thisFunction, 'position', { get: function get() { if (transform.p) { return _transformFactory(); } return [_px(), _py(), _pz ? _pz() : 0]; } }); Object.defineProperty(_thisFunction, 'xPosition', { get: ExpressionPropertyInterface(transform.px) }); Object.defineProperty(_thisFunction, 'yPosition', { get: ExpressionPropertyInterface(transform.py) }); Object.defineProperty(_thisFunction, 'zPosition', { get: ExpressionPropertyInterface(transform.pz) }); Object.defineProperty(_thisFunction, 'anchorPoint', { get: ExpressionPropertyInterface(transform.a) }); Object.defineProperty(_thisFunction, 'opacity', { get: ExpressionPropertyInterface(transform.o) }); Object.defineProperty(_thisFunction, 'skew', { get: ExpressionPropertyInterface(transform.sk) }); Object.defineProperty(_thisFunction, 'skewAxis', { get: ExpressionPropertyInterface(transform.sa) }); Object.defineProperty(_thisFunction, 'orientation', { get: ExpressionPropertyInterface(transform.or) }); return _thisFunction; }; }(); var LayerExpressionInterface = function () { function getMatrix(time) { var toWorldMat = new Matrix(); if (time !== undefined) { var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time); propMatrix.clone(toWorldMat); } else { var transformMat = this._elem.finalTransform.mProp; transformMat.applyToMatrix(toWorldMat); } return toWorldMat; } function toWorldVec(arr, time) { var toWorldMat = this.getMatrix(time); toWorldMat.props[12] = 0; toWorldMat.props[13] = 0; toWorldMat.props[14] = 0; return this.applyPoint(toWorldMat, arr); } function toWorld(arr, time) { var toWorldMat = this.getMatrix(time); return this.applyPoint(toWorldMat, arr); } function fromWorldVec(arr, time) { var toWorldMat = this.getMatrix(time); toWorldMat.props[12] = 0; toWorldMat.props[13] = 0; toWorldMat.props[14] = 0; return this.invertPoint(toWorldMat, arr); } function fromWorld(arr, time) { var toWorldMat = this.getMatrix(time); return this.invertPoint(toWorldMat, arr); } function applyPoint(matrix, arr) { if (this._elem.hierarchy && this._elem.hierarchy.length) { var i; var len = this._elem.hierarchy.length; for (i = 0; i < len; i += 1) { this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix); } } return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0); } function invertPoint(matrix, arr) { if (this._elem.hierarchy && this._elem.hierarchy.length) { var i; var len = this._elem.hierarchy.length; for (i = 0; i < len; i += 1) { this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix); } } return matrix.inversePoint(arr); } function fromComp(arr) { var toWorldMat = new Matrix(); toWorldMat.reset(); this._elem.finalTransform.mProp.applyToMatrix(toWorldMat); if (this._elem.hierarchy && this._elem.hierarchy.length) { var i; var len = this._elem.hierarchy.length; for (i = 0; i < len; i += 1) { this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat); } return toWorldMat.inversePoint(arr); } return toWorldMat.inversePoint(arr); } function sampleImage() { return [1, 1, 1, 1]; } return function (elem) { var transformInterface; function _registerMaskInterface(maskManager) { _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem); } function _registerEffectsInterface(effects) { _thisLayerFunction.effect = effects; } function _thisLayerFunction(name) { switch (name) { case 'ADBE Root Vectors Group': case 'Contents': case 2: return _thisLayerFunction.shapeInterface; case 1: case 6: case 'Transform': case 'transform': case 'ADBE Transform Group': return transformInterface; case 4: case 'ADBE Effect Parade': case 'effects': case 'Effects': return _thisLayerFunction.effect; case 'ADBE Text Properties': return _thisLayerFunction.textInterface; default: return null; } } _thisLayerFunction.getMatrix = getMatrix; _thisLayerFunction.invertPoint = invertPoint; _thisLayerFunction.applyPoint = applyPoint; _thisLayerFunction.toWorld = toWorld; _thisLayerFunction.toWorldVec = toWorldVec; _thisLayerFunction.fromWorld = fromWorld; _thisLayerFunction.fromWorldVec = fromWorldVec; _thisLayerFunction.toComp = toWorld; _thisLayerFunction.fromComp = fromComp; _thisLayerFunction.sampleImage = sampleImage; _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem); _thisLayerFunction._elem = elem; transformInterface = TransformExpressionInterface(elem.finalTransform.mProp); var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint'); Object.defineProperties(_thisLayerFunction, { hasParent: { get: function get() { return elem.hierarchy.length; } }, parent: { get: function get() { return elem.hierarchy[0].layerInterface; } }, rotation: getDescriptor(transformInterface, 'rotation'), scale: getDescriptor(transformInterface, 'scale'), position: getDescriptor(transformInterface, 'position'), opacity: getDescriptor(transformInterface, 'opacity'), anchorPoint: anchorPointDescriptor, anchor_point: anchorPointDescriptor, transform: { get: function get() { return transformInterface; } }, active: { get: function get() { return elem.isInRange; } } }); _thisLayerFunction.startTime = elem.data.st; _thisLayerFunction.index = elem.data.ind; _thisLayerFunction.source = elem.data.refId; _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100; _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100; _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate; _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate; _thisLayerFunction._name = elem.data.nm; _thisLayerFunction.registerMaskInterface = _registerMaskInterface; _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface; return _thisLayerFunction; }; }(); var propertyGroupFactory = function () { return function (interfaceFunction, parentPropertyGroup) { return function (val) { val = val === undefined ? 1 : val; if (val <= 0) { return interfaceFunction; } return parentPropertyGroup(val - 1); }; }; }(); var PropertyInterface = function () { return function (propertyName, propertyGroup) { var interfaceFunction = { _name: propertyName }; function _propertyGroup(val) { val = val === undefined ? 1 : val; if (val <= 0) { return interfaceFunction; } return propertyGroup(val - 1); } return _propertyGroup; }; }(); var EffectsExpressionInterface = function () { var ob = { createEffectsInterface: createEffectsInterface }; function createEffectsInterface(elem, propertyGroup) { if (elem.effectsManager) { var effectElements = []; var effectsData = elem.data.ef; var i; var len = elem.effectsManager.effectElements.length; for (i = 0; i < len; i += 1) { effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem)); } var effects = elem.data.ef || []; var groupInterface = function groupInterface(name) { i = 0; len = effects.length; while (i < len) { if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) { return effectElements[i]; } i += 1; } return null; }; Object.defineProperty(groupInterface, 'numProperties', { get: function get() { return effects.length; } }); return groupInterface; } return null; } function createGroupInterface(data, elements, propertyGroup, elem) { function groupInterface(name) { var effects = data.ef; var i = 0; var len = effects.length; while (i < len) { if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) { if (effects[i].ty === 5) { return effectElements[i]; } return effectElements[i](); } i += 1; } throw new Error(); } var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup); var effectElements = []; var i; var len = data.ef.length; for (i = 0; i < len; i += 1) { if (data.ef[i].ty === 5) { effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem)); } else { effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup)); } } if (data.mn === 'ADBE Color Control') { Object.defineProperty(groupInterface, 'color', { get: function get() { return effectElements[0](); } }); } Object.defineProperties(groupInterface, { numProperties: { get: function get() { return data.np; } }, _name: { value: data.nm }, propertyGroup: { value: _propertyGroup } }); groupInterface.enabled = data.en !== 0; groupInterface.active = groupInterface.enabled; return groupInterface; } function createValueInterface(element, type, elem, propertyGroup) { var expressionProperty = ExpressionPropertyInterface(element.p); function interfaceFunction() { if (type === 10) { return elem.comp.compInterface(element.p.v); } return expressionProperty(); } if (element.p.setGroupProperty) { element.p.setGroupProperty(PropertyInterface('', propertyGroup)); } return interfaceFunction; } return ob; }(); var ShapePathInterface = function () { return function pathInterfaceFactory(shape, view, propertyGroup) { var prop = view.sh; function interfaceFunction(val) { if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) { return interfaceFunction.path; } return null; } var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); prop.setGroupProperty(PropertyInterface('Path', _propertyGroup)); Object.defineProperties(interfaceFunction, { path: { get: function get() { if (prop.k) { prop.getValue(); } return prop; } }, shape: { get: function get() { if (prop.k) { prop.getValue(); } return prop; } }, _name: { value: shape.nm }, ix: { value: shape.ix }, propertyIndex: { value: shape.ix }, mn: { value: shape.mn }, propertyGroup: { value: propertyGroup } }); return interfaceFunction; }; }(); var ShapeExpressionInterface = function () { function iterateElements(shapes, view, propertyGroup) { var arr = []; var i; var len = shapes ? shapes.length : 0; for (i = 0; i < len; i += 1) { if (shapes[i].ty === 'gr') { arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'fl') { arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'st') { arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'tm') { arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'tr') { // arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup)); } else if (shapes[i].ty === 'el') { arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'sr') { arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'sh') { arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'rc') { arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'rd') { arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'rp') { arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup)); } else if (shapes[i].ty === 'gf') { arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup)); } else { arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup)); } } return arr; } function contentsInterfaceFactory(shape, view, propertyGroup) { var interfaces; var interfaceFunction = function _interfaceFunction(value) { var i = 0; var len = interfaces.length; while (i < len) { if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) { return interfaces[i]; } i += 1; } if (typeof value === 'number') { return interfaces[value - 1]; } return null; }; interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup); interfaceFunction.numProperties = interfaces.length; var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); interfaceFunction.transform = transformInterface; interfaceFunction.propertyIndex = shape.cix; interfaceFunction._name = shape.nm; return interfaceFunction; } function groupInterfaceFactory(shape, view, propertyGroup) { var interfaceFunction = function _interfaceFunction(value) { switch (value) { case 'ADBE Vectors Group': case 'Contents': case 2: return interfaceFunction.content; // Not necessary for now. Keeping them here in case a new case appears // case 'ADBE Vector Transform Group': // case 3: default: return interfaceFunction.transform; } }; interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup); var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); interfaceFunction.content = content; interfaceFunction.transform = transformInterface; Object.defineProperty(interfaceFunction, '_name', { get: function get() { return shape.nm; } }); // interfaceFunction.content = interfaceFunction; interfaceFunction.numProperties = shape.np; interfaceFunction.propertyIndex = shape.ix; interfaceFunction.nm = shape.nm; interfaceFunction.mn = shape.mn; return interfaceFunction; } function fillInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(val) { if (val === 'Color' || val === 'color') { return interfaceFunction.color; } if (val === 'Opacity' || val === 'opacity') { return interfaceFunction.opacity; } return null; } Object.defineProperties(interfaceFunction, { color: { get: ExpressionPropertyInterface(view.c) }, opacity: { get: ExpressionPropertyInterface(view.o) }, _name: { value: shape.nm }, mn: { value: shape.mn } }); view.c.setGroupProperty(PropertyInterface('Color', propertyGroup)); view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup)); return interfaceFunction; } function gradientFillInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(val) { if (val === 'Start Point' || val === 'start point') { return interfaceFunction.startPoint; } if (val === 'End Point' || val === 'end point') { return interfaceFunction.endPoint; } if (val === 'Opacity' || val === 'opacity') { return interfaceFunction.opacity; } return null; } Object.defineProperties(interfaceFunction, { startPoint: { get: ExpressionPropertyInterface(view.s) }, endPoint: { get: ExpressionPropertyInterface(view.e) }, opacity: { get: ExpressionPropertyInterface(view.o) }, type: { get: function get() { return 'a'; } }, _name: { value: shape.nm }, mn: { value: shape.mn } }); view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup)); view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup)); view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup)); return interfaceFunction; } function defaultInterfaceFactory() { function interfaceFunction() { return null; } return interfaceFunction; } function strokeInterfaceFactory(shape, view, propertyGroup) { var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup); function addPropertyToDashOb(i) { Object.defineProperty(dashOb, shape.d[i].nm, { get: ExpressionPropertyInterface(view.d.dataProps[i].p) }); } var i; var len = shape.d ? shape.d.length : 0; var dashOb = {}; for (i = 0; i < len; i += 1) { addPropertyToDashOb(i); view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup); } function interfaceFunction(val) { if (val === 'Color' || val === 'color') { return interfaceFunction.color; } if (val === 'Opacity' || val === 'opacity') { return interfaceFunction.opacity; } if (val === 'Stroke Width' || val === 'stroke width') { return interfaceFunction.strokeWidth; } return null; } Object.defineProperties(interfaceFunction, { color: { get: ExpressionPropertyInterface(view.c) }, opacity: { get: ExpressionPropertyInterface(view.o) }, strokeWidth: { get: ExpressionPropertyInterface(view.w) }, dash: { get: function get() { return dashOb; } }, _name: { value: shape.nm }, mn: { value: shape.mn } }); view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup)); view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup)); view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup)); return interfaceFunction; } function trimInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(val) { if (val === shape.e.ix || val === 'End' || val === 'end') { return interfaceFunction.end; } if (val === shape.s.ix) { return interfaceFunction.start; } if (val === shape.o.ix) { return interfaceFunction.offset; } return null; } var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); interfaceFunction.propertyIndex = shape.ix; view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup)); view.e.setGroupProperty(PropertyInterface('End', _propertyGroup)); view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup)); interfaceFunction.propertyIndex = shape.ix; interfaceFunction.propertyGroup = propertyGroup; Object.defineProperties(interfaceFunction, { start: { get: ExpressionPropertyInterface(view.s) }, end: { get: ExpressionPropertyInterface(view.e) }, offset: { get: ExpressionPropertyInterface(view.o) }, _name: { value: shape.nm } }); interfaceFunction.mn = shape.mn; return interfaceFunction; } function transformInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(value) { if (shape.a.ix === value || value === 'Anchor Point') { return interfaceFunction.anchorPoint; } if (shape.o.ix === value || value === 'Opacity') { return interfaceFunction.opacity; } if (shape.p.ix === value || value === 'Position') { return interfaceFunction.position; } if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') { return interfaceFunction.rotation; } if (shape.s.ix === value || value === 'Scale') { return interfaceFunction.scale; } if (shape.sk && shape.sk.ix === value || value === 'Skew') { return interfaceFunction.skew; } if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') { return interfaceFunction.skewAxis; } return null; } var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup)); view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup)); view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup)); view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup)); view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup)); if (view.transform.mProps.sk) { view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup)); view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup)); } view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup)); Object.defineProperties(interfaceFunction, { opacity: { get: ExpressionPropertyInterface(view.transform.mProps.o) }, position: { get: ExpressionPropertyInterface(view.transform.mProps.p) }, anchorPoint: { get: ExpressionPropertyInterface(view.transform.mProps.a) }, scale: { get: ExpressionPropertyInterface(view.transform.mProps.s) }, rotation: { get: ExpressionPropertyInterface(view.transform.mProps.r) }, skew: { get: ExpressionPropertyInterface(view.transform.mProps.sk) }, skewAxis: { get: ExpressionPropertyInterface(view.transform.mProps.sa) }, _name: { value: shape.nm } }); interfaceFunction.ty = 'tr'; interfaceFunction.mn = shape.mn; interfaceFunction.propertyGroup = propertyGroup; return interfaceFunction; } function ellipseInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(value) { if (shape.p.ix === value) { return interfaceFunction.position; } if (shape.s.ix === value) { return interfaceFunction.size; } return null; } var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); interfaceFunction.propertyIndex = shape.ix; var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh; prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup)); prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup)); Object.defineProperties(interfaceFunction, { size: { get: ExpressionPropertyInterface(prop.s) }, position: { get: ExpressionPropertyInterface(prop.p) }, _name: { value: shape.nm } }); interfaceFunction.mn = shape.mn; return interfaceFunction; } function starInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(value) { if (shape.p.ix === value) { return interfaceFunction.position; } if (shape.r.ix === value) { return interfaceFunction.rotation; } if (shape.pt.ix === value) { return interfaceFunction.points; } if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') { return interfaceFunction.outerRadius; } if (shape.os.ix === value) { return interfaceFunction.outerRoundness; } if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) { return interfaceFunction.innerRadius; } if (shape.is && shape.is.ix === value) { return interfaceFunction.innerRoundness; } return null; } var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh; interfaceFunction.propertyIndex = shape.ix; prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup)); prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup)); prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup)); prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup)); prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup)); if (shape.ir) { prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup)); prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup)); } Object.defineProperties(interfaceFunction, { position: { get: ExpressionPropertyInterface(prop.p) }, rotation: { get: ExpressionPropertyInterface(prop.r) }, points: { get: ExpressionPropertyInterface(prop.pt) }, outerRadius: { get: ExpressionPropertyInterface(prop.or) }, outerRoundness: { get: ExpressionPropertyInterface(prop.os) }, innerRadius: { get: ExpressionPropertyInterface(prop.ir) }, innerRoundness: { get: ExpressionPropertyInterface(prop.is) }, _name: { value: shape.nm } }); interfaceFunction.mn = shape.mn; return interfaceFunction; } function rectInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(value) { if (shape.p.ix === value) { return interfaceFunction.position; } if (shape.r.ix === value) { return interfaceFunction.roundness; } if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') { return interfaceFunction.size; } return null; } var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh; interfaceFunction.propertyIndex = shape.ix; prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup)); prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup)); prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup)); Object.defineProperties(interfaceFunction, { position: { get: ExpressionPropertyInterface(prop.p) }, roundness: { get: ExpressionPropertyInterface(prop.r) }, size: { get: ExpressionPropertyInterface(prop.s) }, _name: { value: shape.nm } }); interfaceFunction.mn = shape.mn; return interfaceFunction; } function roundedInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(value) { if (shape.r.ix === value || value === 'Round Corners 1') { return interfaceFunction.radius; } return null; } var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); var prop = view; interfaceFunction.propertyIndex = shape.ix; prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup)); Object.defineProperties(interfaceFunction, { radius: { get: ExpressionPropertyInterface(prop.rd) }, _name: { value: shape.nm } }); interfaceFunction.mn = shape.mn; return interfaceFunction; } function repeaterInterfaceFactory(shape, view, propertyGroup) { function interfaceFunction(value) { if (shape.c.ix === value || value === 'Copies') { return interfaceFunction.copies; } if (shape.o.ix === value || value === 'Offset') { return interfaceFunction.offset; } return null; } var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); var prop = view; interfaceFunction.propertyIndex = shape.ix; prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup)); prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup)); Object.defineProperties(interfaceFunction, { copies: { get: ExpressionPropertyInterface(prop.c) }, offset: { get: ExpressionPropertyInterface(prop.o) }, _name: { value: shape.nm } }); interfaceFunction.mn = shape.mn; return interfaceFunction; } return function (shapes, view, propertyGroup) { var interfaces; function _interfaceFunction(value) { if (typeof value === 'number') { value = value === undefined ? 1 : value; if (value === 0) { return propertyGroup; } return interfaces[value - 1]; } var i = 0; var len = interfaces.length; while (i < len) { if (interfaces[i]._name === value) { return interfaces[i]; } i += 1; } return null; } function parentGroupWrapper() { return propertyGroup; } _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper); interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup); _interfaceFunction.numProperties = interfaces.length; _interfaceFunction._name = 'Contents'; return _interfaceFunction; }; }(); var TextExpressionInterface = function () { return function (elem) { var _sourceText; function _thisLayerFunction(name) { switch (name) { case 'ADBE Text Document': return _thisLayerFunction.sourceText; default: return null; } } Object.defineProperty(_thisLayerFunction, 'sourceText', { get: function get() { elem.textProperty.getValue(); var stringValue = elem.textProperty.currentData.t; if (!_sourceText || stringValue !== _sourceText.value) { _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers Object.defineProperty(_sourceText, 'style', { get: function get() { return { fillColor: elem.textProperty.currentData.fc }; } }); } return _sourceText; } }); return _thisLayerFunction; }; }(); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var FootageInterface = function () { var outlineInterfaceFactory = function outlineInterfaceFactory(elem) { var currentPropertyName = ''; var currentProperty = elem.getFootageData(); function init() { currentPropertyName = ''; currentProperty = elem.getFootageData(); return searchProperty; } function searchProperty(value) { if (currentProperty[value]) { currentPropertyName = value; currentProperty = currentProperty[value]; if (_typeof(currentProperty) === 'object') { return searchProperty; } return currentProperty; } var propertyNameIndex = value.indexOf(currentPropertyName); if (propertyNameIndex !== -1) { var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10); currentProperty = currentProperty[index]; if (_typeof(currentProperty) === 'object') { return searchProperty; } return currentProperty; } return ''; } return init; }; var dataInterfaceFactory = function dataInterfaceFactory(elem) { function interfaceFunction(value) { if (value === 'Outline') { return interfaceFunction.outlineInterface(); } return null; } interfaceFunction._name = 'Outline'; interfaceFunction.outlineInterface = outlineInterfaceFactory(elem); return interfaceFunction; }; return function (elem) { function _interfaceFunction(value) { if (value === 'Data') { return _interfaceFunction.dataInterface; } return null; } _interfaceFunction._name = 'Data'; _interfaceFunction.dataInterface = dataInterfaceFactory(elem); return _interfaceFunction; }; }(); var interfaces = { layer: LayerExpressionInterface, effects: EffectsExpressionInterface, comp: CompExpressionInterface, shape: ShapeExpressionInterface, text: TextExpressionInterface, footage: FootageInterface }; function getInterface(type) { return interfaces[type] || null; } var expressionHelpers = function () { function searchExpressions(elem, data, prop) { if (data.x) { prop.k = true; prop.x = true; prop.initiateExpression = ExpressionManager.initiateExpression; prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop)); } } function getValueAtTime(frameNum) { frameNum *= this.elem.globalData.frameRate; frameNum -= this.offsetTime; if (frameNum !== this._cachingAtTime.lastFrame) { this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0; this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime); this._cachingAtTime.lastFrame = frameNum; } return this._cachingAtTime.value; } function getSpeedAtTime(frameNum) { var delta = -0.01; var v1 = this.getValueAtTime(frameNum); var v2 = this.getValueAtTime(frameNum + delta); var speed = 0; if (v1.length) { var i; for (i = 0; i < v1.length; i += 1) { speed += Math.pow(v2[i] - v1[i], 2); } speed = Math.sqrt(speed) * 100; } else { speed = 0; } return speed; } function getVelocityAtTime(frameNum) { if (this.vel !== undefined) { return this.vel; } var delta = -0.001; // frameNum += this.elem.data.st; var v1 = this.getValueAtTime(frameNum); var v2 = this.getValueAtTime(frameNum + delta); var velocity; if (v1.length) { velocity = createTypedArray('float32', v1.length); var i; for (i = 0; i < v1.length; i += 1) { // removing frameRate // if needed, don't add it here // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta); velocity[i] = (v2[i] - v1[i]) / delta; } } else { velocity = (v2 - v1) / delta; } return velocity; } function getStaticValueAtTime() { return this.pv; } function setGroupProperty(propertyGroup) { this.propertyGroup = propertyGroup; } return { searchExpressions: searchExpressions, getSpeedAtTime: getSpeedAtTime, getVelocityAtTime: getVelocityAtTime, getValueAtTime: getValueAtTime, getStaticValueAtTime: getStaticValueAtTime, setGroupProperty: setGroupProperty }; }(); function addPropertyDecorator() { function loopOut(type, duration, durationFlag) { if (!this.k || !this.keyframes) { return this.pv; } type = type ? type.toLowerCase() : ''; var currentFrame = this.comp.renderedFrame; var keyframes = this.keyframes; var lastKeyFrame = keyframes[keyframes.length - 1].t; if (currentFrame <= lastKeyFrame) { return this.pv; } var cycleDuration; var firstKeyFrame; if (!durationFlag) { if (!duration || duration > keyframes.length - 1) { duration = keyframes.length - 1; } firstKeyFrame = keyframes[keyframes.length - 1 - duration].t; cycleDuration = lastKeyFrame - firstKeyFrame; } else { if (!duration) { cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip); } else { cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration); } firstKeyFrame = lastKeyFrame - cycleDuration; } var i; var len; var ret; if (type === 'pingpong') { var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); if (iterations % 2 !== 0) { return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line } } else if (type === 'offset') { var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); if (this.pv.length) { ret = new Array(initV.length); len = ret.length; for (i = 0; i < len; i += 1) { ret[i] = (endV[i] - initV[i]) * repeats + current[i]; } return ret; } return (endV - initV) * repeats + current; } else if (type === 'continue') { var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0); if (this.pv.length) { ret = new Array(lastValue.length); len = ret.length; for (i = 0; i < len; i += 1) { ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line } return ret; } return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001); } return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line } function loopIn(type, duration, durationFlag) { if (!this.k) { return this.pv; } type = type ? type.toLowerCase() : ''; var currentFrame = this.comp.renderedFrame; var keyframes = this.keyframes; var firstKeyFrame = keyframes[0].t; if (currentFrame >= firstKeyFrame) { return this.pv; } var cycleDuration; var lastKeyFrame; if (!durationFlag) { if (!duration || duration > keyframes.length - 1) { duration = keyframes.length - 1; } lastKeyFrame = keyframes[duration].t; cycleDuration = lastKeyFrame - firstKeyFrame; } else { if (!duration) { cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame); } else { cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration); } lastKeyFrame = firstKeyFrame + cycleDuration; } var i; var len; var ret; if (type === 'pingpong') { var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration); if (iterations % 2 === 0) { return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line } } else if (type === 'offset') { var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1; if (this.pv.length) { ret = new Array(initV.length); len = ret.length; for (i = 0; i < len; i += 1) { ret[i] = current[i] - (endV[i] - initV[i]) * repeats; } return ret; } return current - (endV - initV) * repeats; } else if (type === 'continue') { var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0); if (this.pv.length) { ret = new Array(firstValue.length); len = ret.length; for (i = 0; i < len; i += 1) { ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001; } return ret; } return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001; } return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line } function smooth(width, samples) { if (!this.k) { return this.pv; } width = (width || 0.4) * 0.5; samples = Math.floor(samples || 5); if (samples <= 1) { return this.pv; } var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate; var initFrame = currentTime - width; var endFrame = currentTime + width; var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1; var i = 0; var j = 0; var value; if (this.pv.length) { value = createTypedArray('float32', this.pv.length); } else { value = 0; } var sampleValue; while (i < samples) { sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency); if (this.pv.length) { for (j = 0; j < this.pv.length; j += 1) { value[j] += sampleValue[j]; } } else { value += sampleValue; } i += 1; } if (this.pv.length) { for (j = 0; j < this.pv.length; j += 1) { value[j] /= samples; } } else { value /= samples; } return value; } function getTransformValueAtTime(time) { if (!this._transformCachingAtTime) { this._transformCachingAtTime = { v: new Matrix() }; } /// / var matrix = this._transformCachingAtTime.v; matrix.cloneFromProps(this.pre.props); if (this.appliedTransformations < 1) { var anchor = this.a.getValueAtTime(time); matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult); } if (this.appliedTransformations < 2) { var scale = this.s.getValueAtTime(time); matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult); } if (this.sk && this.appliedTransformations < 3) { var skew = this.sk.getValueAtTime(time); var skewAxis = this.sa.getValueAtTime(time); matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult); } if (this.r && this.appliedTransformations < 4) { var rotation = this.r.getValueAtTime(time); matrix.rotate(-rotation * this.r.mult); } else if (!this.r && this.appliedTransformations < 4) { var rotationZ = this.rz.getValueAtTime(time); var rotationY = this.ry.getValueAtTime(time); var rotationX = this.rx.getValueAtTime(time); var orientation = this.or.getValueAtTime(time); 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); } if (this.data.p && this.data.p.s) { var positionX = this.px.getValueAtTime(time); var positionY = this.py.getValueAtTime(time); if (this.data.p.z) { var positionZ = this.pz.getValueAtTime(time); matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult); } else { matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0); } } else { var position = this.p.getValueAtTime(time); matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult); } return matrix; /// / } function getTransformStaticValueAtTime() { return this.v.clone(new Matrix()); } var getTransformProperty = TransformPropertyFactory.getTransformProperty; TransformPropertyFactory.getTransformProperty = function (elem, data, container) { var prop = getTransformProperty(elem, data, container); if (prop.dynamicProperties.length) { prop.getValueAtTime = getTransformValueAtTime.bind(prop); } else { prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop); } prop.setGroupProperty = expressionHelpers.setGroupProperty; return prop; }; var propertyGetProp = PropertyFactory.getProp; PropertyFactory.getProp = function (elem, data, type, mult, container) { var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime; // prop.loopOut = loopOut; // prop.loopIn = loopIn; if (prop.kf) { prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop); } else { prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop); } prop.setGroupProperty = expressionHelpers.setGroupProperty; prop.loopOut = loopOut; prop.loopIn = loopIn; prop.smooth = smooth; prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop); prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop); prop.numKeys = data.a === 1 ? data.k.length : 0; prop.propertyIndex = data.ix; var value = 0; if (type !== 0) { value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length); } prop._cachingAtTime = { lastFrame: initialDefaultFrame, lastIndex: 0, value: value }; expressionHelpers.searchExpressions(elem, data, prop); if (prop.k) { container.addDynamicProperty(prop); } return prop; }; function getShapeValueAtTime(frameNum) { // For now this caching object is created only when needed instead of creating it when the shape is initialized. if (!this._cachingAtTime) { this._cachingAtTime = { shapeValue: shapePool.clone(this.pv), lastIndex: 0, lastTime: initialDefaultFrame }; } frameNum *= this.elem.globalData.frameRate; frameNum -= this.offsetTime; if (frameNum !== this._cachingAtTime.lastTime) { this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0; this._cachingAtTime.lastTime = frameNum; this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime); } return this._cachingAtTime.shapeValue; } var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction(); var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction(); function ShapeExpressions() {} ShapeExpressions.prototype = { vertices: function vertices(prop, time) { if (this.k) { this.getValue(); } var shapePath = this.v; if (time !== undefined) { shapePath = this.getValueAtTime(time, 0); } var i; var len = shapePath._length; var vertices = shapePath[prop]; var points = shapePath.v; var arr = createSizedArray(len); for (i = 0; i < len; i += 1) { if (prop === 'i' || prop === 'o') { arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]]; } else { arr[i] = [vertices[i][0], vertices[i][1]]; } } return arr; }, points: function points(time) { return this.vertices('v', time); }, inTangents: function inTangents(time) { return this.vertices('i', time); }, outTangents: function outTangents(time) { return this.vertices('o', time); }, isClosed: function isClosed() { return this.v.c; }, pointOnPath: function pointOnPath(perc, time) { var shapePath = this.v; if (time !== undefined) { shapePath = this.getValueAtTime(time, 0); } if (!this._segmentsLength) { this._segmentsLength = bez.getSegmentsLength(shapePath); } var segmentsLength = this._segmentsLength; var lengths = segmentsLength.lengths; var lengthPos = segmentsLength.totalLength * perc; var i = 0; var len = lengths.length; var accumulatedLength = 0; var pt; while (i < len) { if (accumulatedLength + lengths[i].addedLength > lengthPos) { var initIndex = i; var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1; var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength; pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]); break; } else { accumulatedLength += lengths[i].addedLength; } i += 1; } if (!pt) { pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]]; } return pt; }, vectorOnPath: function vectorOnPath(perc, time, vectorType) { // perc doesn't use triple equality because it can be a Number object as well as a primitive. if (perc == 1) { // eslint-disable-line eqeqeq perc = this.v.c; } else if (perc == 0) { // eslint-disable-line eqeqeq perc = 0.999; } var pt1 = this.pointOnPath(perc, time); var pt2 = this.pointOnPath(perc + 0.001, time); var xLength = pt2[0] - pt1[0]; var yLength = pt2[1] - pt1[1]; var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2)); if (magnitude === 0) { return [0, 0]; } var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude]; return unitVector; }, tangentOnPath: function tangentOnPath(perc, time) { return this.vectorOnPath(perc, time, 'tangent'); }, normalOnPath: function normalOnPath(perc, time) { return this.vectorOnPath(perc, time, 'normal'); }, setGroupProperty: expressionHelpers.setGroupProperty, getValueAtTime: expressionHelpers.getStaticValueAtTime }; extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction); extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction); KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime; KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression; var propertyGetShapeProp = ShapePropertyFactory.getShapeProp; ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) { var prop = propertyGetShapeProp(elem, data, type, arr, trims); prop.propertyIndex = data.ix; prop.lock = false; if (type === 3) { expressionHelpers.searchExpressions(elem, data.pt, prop); } else if (type === 4) { expressionHelpers.searchExpressions(elem, data.ks, prop); } if (prop.k) { elem.addDynamicProperty(prop); } return prop; }; } function initialize$1() { addPropertyDecorator(); } function addDecorator() { function searchExpressions() { if (this.data.d.x) { this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this); this.addEffect(this.getExpressionValue.bind(this)); return true; } return null; } TextProperty.prototype.getExpressionValue = function (currentValue, text) { var newValue = this.calculateExpression(text); if (currentValue.t !== newValue) { var newData = {}; this.copyData(newData, currentValue); newData.t = newValue.toString(); newData.__complete = false; return newData; } return currentValue; }; TextProperty.prototype.searchProperty = function () { var isKeyframed = this.searchKeyframes(); var hasExpressions = this.searchExpressions(); this.kf = isKeyframed || hasExpressions; return this.kf; }; TextProperty.prototype.searchExpressions = searchExpressions; } function initialize() { addDecorator(); } function SVGComposableEffect() {} SVGComposableEffect.prototype = { createMergeNode: function createMergeNode(resultId, ins) { var feMerge = createNS('feMerge'); feMerge.setAttribute('result', resultId); var feMergeNode; var i; for (i = 0; i < ins.length; i += 1) { feMergeNode = createNS('feMergeNode'); feMergeNode.setAttribute('in', ins[i]); feMerge.appendChild(feMergeNode); feMerge.appendChild(feMergeNode); } return feMerge; } }; var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0'; function SVGTintFilter(filter, filterManager, elem, id, source) { this.filterManager = filterManager; var feColorMatrix = createNS('feColorMatrix'); feColorMatrix.setAttribute('type', 'matrix'); feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB'); feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0'); this.linearFilter = feColorMatrix; feColorMatrix.setAttribute('result', id + '_tint_1'); filter.appendChild(feColorMatrix); feColorMatrix = createNS('feColorMatrix'); feColorMatrix.setAttribute('type', 'matrix'); feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB'); feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0'); feColorMatrix.setAttribute('result', id + '_tint_2'); filter.appendChild(feColorMatrix); this.matrixFilter = feColorMatrix; var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']); filter.appendChild(feMerge); } extendPrototype([SVGComposableEffect], SVGTintFilter); SVGTintFilter.prototype.renderFrame = function (forceRender) { if (forceRender || this.filterManager._mdf) { var colorBlack = this.filterManager.effectElements[0].p.v; var colorWhite = this.filterManager.effectElements[1].p.v; var opacity = this.filterManager.effectElements[2].p.v / 100; this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0'); this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0'); } }; function SVGFillFilter(filter, filterManager, elem, id) { this.filterManager = filterManager; var feColorMatrix = createNS('feColorMatrix'); feColorMatrix.setAttribute('type', 'matrix'); feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB'); feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0'); feColorMatrix.setAttribute('result', id); filter.appendChild(feColorMatrix); this.matrixFilter = feColorMatrix; } SVGFillFilter.prototype.renderFrame = function (forceRender) { if (forceRender || this.filterManager._mdf) { var color = this.filterManager.effectElements[2].p.v; var opacity = this.filterManager.effectElements[6].p.v; 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'); } }; function SVGStrokeEffect(fil, filterManager, elem) { this.initialized = false; this.filterManager = filterManager; this.elem = elem; this.paths = []; } SVGStrokeEffect.prototype.initialize = function () { var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes; var path; var groupPath; var i; var len; if (this.filterManager.effectElements[1].p.v === 1) { len = this.elem.maskManager.masksProperties.length; i = 0; } else { i = this.filterManager.effectElements[0].p.v - 1; len = i + 1; } groupPath = createNS('g'); groupPath.setAttribute('fill', 'none'); groupPath.setAttribute('stroke-linecap', 'round'); groupPath.setAttribute('stroke-dashoffset', 1); for (i; i < len; i += 1) { path = createNS('path'); groupPath.appendChild(path); this.paths.push({ p: path, m: i }); } if (this.filterManager.effectElements[10].p.v === 3) { var mask = createNS('mask'); var id = createElementID(); mask.setAttribute('id', id); mask.setAttribute('mask-type', 'alpha'); mask.appendChild(groupPath); this.elem.globalData.defs.appendChild(mask); var g = createNS('g'); g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')'); while (elemChildren[0]) { g.appendChild(elemChildren[0]); } this.elem.layerElement.appendChild(g); this.masker = mask; groupPath.setAttribute('stroke', '#fff'); } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) { if (this.filterManager.effectElements[10].p.v === 2) { elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes; while (elemChildren.length) { this.elem.layerElement.removeChild(elemChildren[0]); } } this.elem.layerElement.appendChild(groupPath); this.elem.layerElement.removeAttribute('mask'); groupPath.setAttribute('stroke', '#fff'); } this.initialized = true; this.pathMasker = groupPath; }; SVGStrokeEffect.prototype.renderFrame = function (forceRender) { if (!this.initialized) { this.initialize(); } var i; var len = this.paths.length; var mask; var path; for (i = 0; i < len; i += 1) { if (this.paths[i].m !== -1) { mask = this.elem.maskManager.viewData[this.paths[i].m]; path = this.paths[i].p; if (forceRender || this.filterManager._mdf || mask.prop._mdf) { path.setAttribute('d', mask.lastPath); } 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) { var dasharrayValue; if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) { var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01; var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01; var l = path.getTotalLength(); dasharrayValue = '0 0 0 ' + l * s + ' '; var lineLength = l * (e - s); var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01; var units = Math.floor(lineLength / segment); var j; for (j = 0; j < units; j += 1) { dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' '; } dasharrayValue += '0 ' + l * 10 + ' 0 0'; } else { dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01; } path.setAttribute('stroke-dasharray', dasharrayValue); } } } if (forceRender || this.filterManager.effectElements[4].p._mdf) { this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2); } if (forceRender || this.filterManager.effectElements[6].p._mdf) { this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v); } if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) { if (forceRender || this.filterManager.effectElements[3].p._mdf) { var color = this.filterManager.effectElements[3].p.v; this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')'); } } }; function SVGTritoneFilter(filter, filterManager, elem, id) { this.filterManager = filterManager; var feColorMatrix = createNS('feColorMatrix'); feColorMatrix.setAttribute('type', 'matrix'); feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB'); 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'); filter.appendChild(feColorMatrix); var feComponentTransfer = createNS('feComponentTransfer'); feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB'); feComponentTransfer.setAttribute('result', id); this.matrixFilter = feComponentTransfer; var feFuncR = createNS('feFuncR'); feFuncR.setAttribute('type', 'table'); feComponentTransfer.appendChild(feFuncR); this.feFuncR = feFuncR; var feFuncG = createNS('feFuncG'); feFuncG.setAttribute('type', 'table'); feComponentTransfer.appendChild(feFuncG); this.feFuncG = feFuncG; var feFuncB = createNS('feFuncB'); feFuncB.setAttribute('type', 'table'); feComponentTransfer.appendChild(feFuncB); this.feFuncB = feFuncB; filter.appendChild(feComponentTransfer); } SVGTritoneFilter.prototype.renderFrame = function (forceRender) { if (forceRender || this.filterManager._mdf) { var color1 = this.filterManager.effectElements[0].p.v; var color2 = this.filterManager.effectElements[1].p.v; var color3 = this.filterManager.effectElements[2].p.v; var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0]; var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1]; var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2]; this.feFuncR.setAttribute('tableValues', tableR); this.feFuncG.setAttribute('tableValues', tableG); this.feFuncB.setAttribute('tableValues', tableB); } }; function SVGProLevelsFilter(filter, filterManager, elem, id) { this.filterManager = filterManager; var effectElements = this.filterManager.effectElements; var feComponentTransfer = createNS('feComponentTransfer'); // Red 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) { this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer); } // Green 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) { this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer); } // Blue 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) { this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer); } // Alpha 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) { this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer); } // RGB if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) { feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB'); filter.appendChild(feComponentTransfer); } 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) { feComponentTransfer = createNS('feComponentTransfer'); feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB'); feComponentTransfer.setAttribute('result', id); filter.appendChild(feComponentTransfer); this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer); this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer); this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer); } } SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) { var feFunc = createNS(type); feFunc.setAttribute('type', 'table'); feComponentTransfer.appendChild(feFunc); return feFunc; }; SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) { var cnt = 0; var segments = 256; var perc; var min = Math.min(inputBlack, inputWhite); var max = Math.max(inputBlack, inputWhite); var table = Array.call(null, { length: segments }); var colorValue; var pos = 0; var outputDelta = outputWhite - outputBlack; var inputDelta = inputWhite - inputBlack; while (cnt <= 256) { perc = cnt / 256; if (perc <= min) { colorValue = inputDelta < 0 ? outputWhite : outputBlack; } else if (perc >= max) { colorValue = inputDelta < 0 ? outputBlack : outputWhite; } else { colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma); } table[pos] = colorValue; pos += 1; cnt += 256 / (segments - 1); } return table.join(' '); }; SVGProLevelsFilter.prototype.renderFrame = function (forceRender) { if (forceRender || this.filterManager._mdf) { var val; var effectElements = this.filterManager.effectElements; if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) { val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v); this.feFuncRComposed.setAttribute('tableValues', val); this.feFuncGComposed.setAttribute('tableValues', val); this.feFuncBComposed.setAttribute('tableValues', val); } if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) { val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v); this.feFuncR.setAttribute('tableValues', val); } if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) { val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v); this.feFuncG.setAttribute('tableValues', val); } if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) { val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v); this.feFuncB.setAttribute('tableValues', val); } if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) { val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v); this.feFuncA.setAttribute('tableValues', val); } } }; function SVGDropShadowEffect(filter, filterManager, elem, id, source) { var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize; var filterSize = filterManager.data.fs || globalFilterSize; filter.setAttribute('x', filterSize.x || globalFilterSize.x); filter.setAttribute('y', filterSize.y || globalFilterSize.y); filter.setAttribute('width', filterSize.width || globalFilterSize.width); filter.setAttribute('height', filterSize.height || globalFilterSize.height); this.filterManager = filterManager; var feGaussianBlur = createNS('feGaussianBlur'); feGaussianBlur.setAttribute('in', 'SourceAlpha'); feGaussianBlur.setAttribute('result', id + '_drop_shadow_1'); feGaussianBlur.setAttribute('stdDeviation', '0'); this.feGaussianBlur = feGaussianBlur; filter.appendChild(feGaussianBlur); var feOffset = createNS('feOffset'); feOffset.setAttribute('dx', '25'); feOffset.setAttribute('dy', '0'); feOffset.setAttribute('in', id + '_drop_shadow_1'); feOffset.setAttribute('result', id + '_drop_shadow_2'); this.feOffset = feOffset; filter.appendChild(feOffset); var feFlood = createNS('feFlood'); feFlood.setAttribute('flood-color', '#00ff00'); feFlood.setAttribute('flood-opacity', '1'); feFlood.setAttribute('result', id + '_drop_shadow_3'); this.feFlood = feFlood; filter.appendChild(feFlood); var feComposite = createNS('feComposite'); feComposite.setAttribute('in', id + '_drop_shadow_3'); feComposite.setAttribute('in2', id + '_drop_shadow_2'); feComposite.setAttribute('operator', 'in'); feComposite.setAttribute('result', id + '_drop_shadow_4'); filter.appendChild(feComposite); var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]); filter.appendChild(feMerge); // } extendPrototype([SVGComposableEffect], SVGDropShadowEffect); SVGDropShadowEffect.prototype.renderFrame = function (forceRender) { if (forceRender || this.filterManager._mdf) { if (forceRender || this.filterManager.effectElements[4].p._mdf) { this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4); } if (forceRender || this.filterManager.effectElements[0].p._mdf) { var col = this.filterManager.effectElements[0].p.v; this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255))); } if (forceRender || this.filterManager.effectElements[1].p._mdf) { this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255); } if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) { var distance = this.filterManager.effectElements[3].p.v; var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads; var x = distance * Math.cos(angle); var y = distance * Math.sin(angle); this.feOffset.setAttribute('dx', x); this.feOffset.setAttribute('dy', y); } } }; var _svgMatteSymbols = []; function SVGMatte3Effect(filterElem, filterManager, elem) { this.initialized = false; this.filterManager = filterManager; this.filterElem = filterElem; this.elem = elem; elem.matteElement = createNS('g'); elem.matteElement.appendChild(elem.layerElement); elem.matteElement.appendChild(elem.transformedElement); elem.baseElement = elem.matteElement; } SVGMatte3Effect.prototype.findSymbol = function (mask) { var i = 0; var len = _svgMatteSymbols.length; while (i < len) { if (_svgMatteSymbols[i] === mask) { return _svgMatteSymbols[i]; } i += 1; } return null; }; SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) { var parentNode = mask.layerElement.parentNode; if (!parentNode) { return; } var children = parentNode.children; var i = 0; var len = children.length; while (i < len) { if (children[i] === mask.layerElement) { break; } i += 1; } var nextChild; if (i <= len - 2) { nextChild = children[i + 1]; } var useElem = createNS('use'); useElem.setAttribute('href', '#' + symbolId); if (nextChild) { parentNode.insertBefore(useElem, nextChild); } else { parentNode.appendChild(useElem); } }; SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) { if (!this.findSymbol(mask)) { var symbolId = createElementID(); var masker = createNS('mask'); masker.setAttribute('id', mask.layerId); masker.setAttribute('mask-type', 'alpha'); _svgMatteSymbols.push(mask); var defs = elem.globalData.defs; defs.appendChild(masker); var symbol = createNS('symbol'); symbol.setAttribute('id', symbolId); this.replaceInParent(mask, symbolId); symbol.appendChild(mask.layerElement); defs.appendChild(symbol); var useElem = createNS('use'); useElem.setAttribute('href', '#' + symbolId); masker.appendChild(useElem); mask.data.hd = false; mask.show(); } elem.setMatte(mask.layerId); }; SVGMatte3Effect.prototype.initialize = function () { var ind = this.filterManager.effectElements[0].p.v; var elements = this.elem.comp.elements; var i = 0; var len = elements.length; while (i < len) { if (elements[i] && elements[i].data.ind === ind) { this.setElementAsMask(this.elem, elements[i]); } i += 1; } this.initialized = true; }; SVGMatte3Effect.prototype.renderFrame = function () { if (!this.initialized) { this.initialize(); } }; function SVGGaussianBlurEffect(filter, filterManager, elem, id) { // Outset the filter region by 100% on all sides to accommodate blur expansion. filter.setAttribute('x', '-100%'); filter.setAttribute('y', '-100%'); filter.setAttribute('width', '300%'); filter.setAttribute('height', '300%'); this.filterManager = filterManager; var feGaussianBlur = createNS('feGaussianBlur'); feGaussianBlur.setAttribute('result', id); filter.appendChild(feGaussianBlur); this.feGaussianBlur = feGaussianBlur; } SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) { if (forceRender || this.filterManager._mdf) { // Empirical value, matching AE's blur appearance. var kBlurrinessToSigma = 0.3; var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping: // // 1 -> horizontal & vertical // 2 -> horizontal only // 3 -> vertical only // var dimensions = this.filterManager.effectElements[1].p.v; var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping: // // 0 -> off -> duplicate // 1 -> on -> wrap var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq this.feGaussianBlur.setAttribute('edgeMode', edgeMode); } }; function TransformEffect() {} TransformEffect.prototype.init = function (effectsManager) { this.effectsManager = effectsManager; this.type = effectTypes.TRANSFORM_EFFECT; this.matrix = new Matrix(); this.opacity = -1; this._mdf = false; this._opMdf = false; }; TransformEffect.prototype.renderFrame = function (forceFrame) { this._opMdf = false; this._mdf = false; if (forceFrame || this.effectsManager._mdf) { var effectElements = this.effectsManager.effectElements; var anchor = effectElements[0].p.v; var position = effectElements[1].p.v; var isUniformScale = effectElements[2].p.v === 1; var scaleHeight = effectElements[3].p.v; var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v; var skew = effectElements[5].p.v; var skewAxis = effectElements[6].p.v; var rotation = effectElements[7].p.v; this.matrix.reset(); this.matrix.translate(-anchor[0], -anchor[1], anchor[2]); this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1); this.matrix.rotate(-rotation * degToRads); this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads); this.matrix.translate(position[0], position[1], 0); this._mdf = true; if (this.opacity !== effectElements[8].p.v) { this.opacity = effectElements[8].p.v; this._opMdf = true; } } }; function SVGTransformEffect(_, filterManager) { this.init(filterManager); } extendPrototype([TransformEffect], SVGTransformEffect); function CVTransformEffect(effectsManager) { this.init(effectsManager); } extendPrototype([TransformEffect], CVTransformEffect); // Registering renderers registerRenderer('canvas', CanvasRenderer); registerRenderer('html', HybridRenderer); registerRenderer('svg', SVGRenderer); // Registering shape modifiers ShapeModifiers.registerModifier('tm', TrimModifier); ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier); ShapeModifiers.registerModifier('rp', RepeaterModifier); ShapeModifiers.registerModifier('rd', RoundCornersModifier); ShapeModifiers.registerModifier('zz', ZigZagModifier); ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin setExpressionsPlugin(Expressions); setExpressionInterfaces(getInterface); initialize$1(); initialize(); // Registering svg effects registerEffect$1(20, SVGTintFilter, true); registerEffect$1(21, SVGFillFilter, true); registerEffect$1(22, SVGStrokeEffect, false); registerEffect$1(23, SVGTritoneFilter, true); registerEffect$1(24, SVGProLevelsFilter, true); registerEffect$1(25, SVGDropShadowEffect, true); registerEffect$1(28, SVGMatte3Effect, false); registerEffect$1(29, SVGGaussianBlurEffect, true); registerEffect$1(35, SVGTransformEffect, false); registerEffect(35, CVTransformEffect); return lottie; })); /***/ }), /***/ "../node_modules/object-assign/index.js": /*!**********************************************!*\ !*** ../node_modules/object-assign/index.js ***! \**********************************************/ /***/ ((module) => { "use strict"; /* object-assign (c) Sindre Sorhus @license MIT */ /* eslint-disable no-unused-vars */ var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === undefined) { throw new TypeError('Object.assign cannot be called with null or undefined'); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } // Detect buggy property enumeration order in older V8 versions. // https://bugs.chromium.org/p/v8/issues/detail?id=4118 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers test1[5] = 'de'; if (Object.getOwnPropertyNames(test1)[0] === '5') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test2 = {}; for (var i = 0; i < 10; i++) { test2['_' + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function (n) { return test2[n]; }); if (order2.join('') !== '0123456789') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test3 = {}; 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { return false; } return true; } catch (err) { // We don't expect any of the above to throw, but better to be safe. return false; } } module.exports = shouldUseNative() ? Object.assign : function (target, source) { var from; var to = toObject(target); var symbols; for (var s = 1; s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i = 0; i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; /***/ }), /***/ "../node_modules/prop-types/checkPropTypes.js": /*!****************************************************!*\ !*** ../node_modules/prop-types/checkPropTypes.js ***! \****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var printWarning = function() {}; if (true) { var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "../node_modules/prop-types/lib/ReactPropTypesSecret.js"); var loggedTypeFailures = {}; var has = __webpack_require__(/*! ./lib/has */ "../node_modules/prop-types/lib/has.js"); printWarning = function(text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) { /**/ } }; } /** * Assert that the values match with the type specs. * Error messages are memorized and will only be shown once. * * @param {object} typeSpecs Map of name to a ReactPropType * @param {object} values Runtime values that need to be type-checked * @param {string} location e.g. "prop", "context", "child context" * @param {string} componentName Name of the component for error messages. * @param {?Function} getStack Returns the component stack. * @private */ function checkPropTypes(typeSpecs, values, location, componentName, getStack) { if (true) { for (var typeSpecName in typeSpecs) { if (has(typeSpecs, typeSpecName)) { var error; // Prop type validation may throw. In case they do, we don't want to // fail the render phase where it didn't fail before. So we log it. // After these have been cleaned up, we'll let them throw. try { // This is intentionally an invariant that gets caught. It's the same // behavior as without this statement except with a better message. if (typeof typeSpecs[typeSpecName] !== 'function') { var err = Error( (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.' ); err.name = 'Invariant Violation'; throw err; } error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); } catch (ex) { error = ex; } if (error && !(error instanceof Error)) { printWarning( (componentName || 'React class') + ': type specification of ' + location + ' `' + typeSpecName + '` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).' ); } if (error instanceof Error && !(error.message in loggedTypeFailures)) { // Only monitor this failure once because there tends to be a lot of the // same error. loggedTypeFailures[error.message] = true; var stack = getStack ? getStack() : ''; printWarning( 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') ); } } } } } /** * Resets warning cache when testing. * * @private */ checkPropTypes.resetWarningCache = function() { if (true) { loggedTypeFailures = {}; } } module.exports = checkPropTypes; /***/ }), /***/ "../node_modules/prop-types/factoryWithTypeCheckers.js": /*!*************************************************************!*\ !*** ../node_modules/prop-types/factoryWithTypeCheckers.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var ReactIs = __webpack_require__(/*! react-is */ "../node_modules/prop-types/node_modules/react-is/index.js"); var assign = __webpack_require__(/*! object-assign */ "../node_modules/object-assign/index.js"); var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "../node_modules/prop-types/lib/ReactPropTypesSecret.js"); var has = __webpack_require__(/*! ./lib/has */ "../node_modules/prop-types/lib/has.js"); var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "../node_modules/prop-types/checkPropTypes.js"); var printWarning = function() {}; if (true) { printWarning = function(text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; } function emptyFunctionThatReturnsNull() { return null; } module.exports = function(isValidElement, throwOnDirectAccess) { /* global Symbol */ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. /** * Returns the iterator method function contained on the iterable object. * * Be sure to invoke the function with the iterable as context: * * var iteratorFn = getIteratorFn(myIterable); * if (iteratorFn) { * var iterator = iteratorFn.call(myIterable); * ... * } * * @param {?object} maybeIterable * @return {?function} */ function getIteratorFn(maybeIterable) { var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); if (typeof iteratorFn === 'function') { return iteratorFn; } } /** * Collection of methods that allow declaration and validation of props that are * supplied to React components. Example usage: * * var Props = require('ReactPropTypes'); * var MyArticle = React.createClass({ * propTypes: { * // An optional string prop named "description". * description: Props.string, * * // A required enum prop named "category". * category: Props.oneOf(['News','Photos']).isRequired, * * // A prop named "dialog" that requires an instance of Dialog. * dialog: Props.instanceOf(Dialog).isRequired * }, * render: function() { ... } * }); * * A more formal specification of how these methods are used: * * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) * decl := ReactPropTypes.{type}(.isRequired)? * * Each and every declaration produces a function with the same signature. This * allows the creation of custom validation functions. For example: * * var MyLink = React.createClass({ * propTypes: { * // An optional string or URI prop named "href". * href: function(props, propName, componentName) { * var propValue = props[propName]; * if (propValue != null && typeof propValue !== 'string' && * !(propValue instanceof URI)) { * return new Error( * 'Expected a string or an URI for ' + propName + ' in ' + * componentName * ); * } * } * }, * render: function() {...} * }); * * @internal */ var ANONYMOUS = '<<anonymous>>'; // Important! // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. var ReactPropTypes = { array: createPrimitiveTypeChecker('array'), bigint: createPrimitiveTypeChecker('bigint'), bool: createPrimitiveTypeChecker('boolean'), func: createPrimitiveTypeChecker('function'), number: createPrimitiveTypeChecker('number'), object: createPrimitiveTypeChecker('object'), string: createPrimitiveTypeChecker('string'), symbol: createPrimitiveTypeChecker('symbol'), any: createAnyTypeChecker(), arrayOf: createArrayOfTypeChecker, element: createElementTypeChecker(), elementType: createElementTypeTypeChecker(), instanceOf: createInstanceTypeChecker, node: createNodeChecker(), objectOf: createObjectOfTypeChecker, oneOf: createEnumTypeChecker, oneOfType: createUnionTypeChecker, shape: createShapeTypeChecker, exact: createStrictShapeTypeChecker, }; /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ /*eslint-disable no-self-compare*/ function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } } /*eslint-enable no-self-compare*/ /** * We use an Error-like object for backward compatibility as people may call * PropTypes directly and inspect their output. However, we don't use real * Errors anymore. We don't inspect their stack anyway, and creating them * is prohibitively expensive if they are created too often, such as what * happens in oneOfType() for any type before the one that matched. */ function PropTypeError(message, data) { this.message = message; this.data = data && typeof data === 'object' ? data: {}; this.stack = ''; } // Make `instanceof Error` still work for returned errors. PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { if (true) { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { componentName = componentName || ANONYMOUS; propFullName = propFullName || propName; if (secret !== ReactPropTypesSecret) { if (throwOnDirectAccess) { // New behavior only for users of `prop-types` package var err = new Error( 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); err.name = 'Invariant Violation'; throw err; } else if ( true && typeof console !== 'undefined') { // Old behavior for people using React.PropTypes var cacheKey = componentName + ':' + propName; if ( !manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3 ) { printWarning( 'You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' ); manualPropTypeCallCache[cacheKey] = true; manualPropTypeWarningCount++; } } } if (props[propName] == null) { if (isRequired) { if (props[propName] === null) { return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); } return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); } return null; } else { return validate(props, propName, componentName, location, propFullName); } } var chainedCheckType = checkType.bind(null, false); chainedCheckType.isRequired = checkType.bind(null, true); return chainedCheckType; } function createPrimitiveTypeChecker(expectedType) { function validate(props, propName, componentName, location, propFullName, secret) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== expectedType) { // `propValue` being instance of, say, date/regexp, pass the 'object' // check, but we can offer a more precise error message here rather than // 'of type `object`'. var preciseType = getPreciseType(propValue); return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'), {expectedType: expectedType} ); } return null; } return createChainableTypeChecker(validate); } function createAnyTypeChecker() { return createChainableTypeChecker(emptyFunctionThatReturnsNull); } function createArrayOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); } var propValue = props[propName]; if (!Array.isArray(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); } for (var i = 0; i < propValue.length; i++) { var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); if (error instanceof Error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createElementTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!isValidElement(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); } return null; } return createChainableTypeChecker(validate); } function createElementTypeTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!ReactIs.isValidElementType(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); } return null; } return createChainableTypeChecker(validate); } function createInstanceTypeChecker(expectedClass) { function validate(props, propName, componentName, location, propFullName) { if (!(props[propName] instanceof expectedClass)) { var expectedClassName = expectedClass.name || ANONYMOUS; var actualClassName = getClassName(props[propName]); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); } return null; } return createChainableTypeChecker(validate); } function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { if (true) { if (arguments.length > 1) { printWarning( 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' ); } else { printWarning('Invalid argument supplied to oneOf, expected an array.'); } } return emptyFunctionThatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; for (var i = 0; i < expectedValues.length; i++) { if (is(propValue, expectedValues[i])) { return null; } } var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { var type = getPreciseType(value); if (type === 'symbol') { return String(value); } return value; }); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); } return createChainableTypeChecker(validate); } function createObjectOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); } var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); } for (var key in propValue) { if (has(propValue, key)) { var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error instanceof Error) { return error; } } } return null; } return createChainableTypeChecker(validate); } function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0; return emptyFunctionThatReturnsNull; } for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (typeof checker !== 'function') { printWarning( 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' ); return emptyFunctionThatReturnsNull; } } function validate(props, propName, componentName, location, propFullName) { var expectedTypes = []; for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret); if (checkerResult == null) { return null; } if (checkerResult.data && has(checkerResult.data, 'expectedType')) { expectedTypes.push(checkerResult.data.expectedType); } } var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': ''; return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.')); } return createChainableTypeChecker(validate); } function createNodeChecker() { function validate(props, propName, componentName, location, propFullName) { if (!isNode(props[propName])) { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); } return null; } return createChainableTypeChecker(validate); } function invalidValidatorError(componentName, location, propFullName, key, type) { return new PropTypeError( (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.' ); } function createShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } for (var key in shapeTypes) { var checker = shapeTypes[key]; if (typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createStrictShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } // We need to check all keys in case some are required but missing from props. var allKeys = assign({}, props[propName], shapeTypes); for (var key in allKeys) { var checker = shapeTypes[key]; if (has(shapeTypes, key) && typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } if (!checker) { return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') ); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function isNode(propValue) { switch (typeof propValue) { case 'number': case 'string': case 'undefined': return true; case 'boolean': return !propValue; case 'object': if (Array.isArray(propValue)) { return propValue.every(isNode); } if (propValue === null || isValidElement(propValue)) { return true; } var iteratorFn = getIteratorFn(propValue); if (iteratorFn) { var iterator = iteratorFn.call(propValue); var step; if (iteratorFn !== propValue.entries) { while (!(step = iterator.next()).done) { if (!isNode(step.value)) { return false; } } } else { // Iterator will provide entry [k,v] tuples rather than values. while (!(step = iterator.next()).done) { var entry = step.value; if (entry) { if (!isNode(entry[1])) { return false; } } } } } else { return false; } return true; default: return false; } } function isSymbol(propType, propValue) { // Native Symbol. if (propType === 'symbol') { return true; } // falsy value can't be a Symbol if (!propValue) { return false; } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' if (propValue['@@toStringTag'] === 'Symbol') { return true; } // Fallback for non-spec compliant Symbols which are polyfilled. if (typeof Symbol === 'function' && propValue instanceof Symbol) { return true; } return false; } // Equivalent of `typeof` but with special handling for array and regexp. function getPropType(propValue) { var propType = typeof propValue; if (Array.isArray(propValue)) { return 'array'; } if (propValue instanceof RegExp) { // Old webkits (at least until Android 4.0) return 'function' rather than // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ // passes PropTypes.object. return 'object'; } if (isSymbol(propType, propValue)) { return 'symbol'; } return propType; } // This handles more types than `getPropType`. Only used for error messages. // See `createPrimitiveTypeChecker`. function getPreciseType(propValue) { if (typeof propValue === 'undefined' || propValue === null) { return '' + propValue; } var propType = getPropType(propValue); if (propType === 'object') { if (propValue instanceof Date) { return 'date'; } else if (propValue instanceof RegExp) { return 'regexp'; } } return propType; } // Returns a string that is postfixed to a warning about an invalid type. // For example, "undefined" or "of type array" function getPostfixForTypeWarning(value) { var type = getPreciseType(value); switch (type) { case 'array': case 'object': return 'an ' + type; case 'boolean': case 'date': case 'regexp': return 'a ' + type; default: return type; } } // Returns class name of the object, if any. function getClassName(propValue) { if (!propValue.constructor || !propValue.constructor.name) { return ANONYMOUS; } return propValue.constructor.name; } ReactPropTypes.checkPropTypes = checkPropTypes; ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; /***/ }), /***/ "../node_modules/prop-types/index.js": /*!*******************************************!*\ !*** ../node_modules/prop-types/index.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (true) { var ReactIs = __webpack_require__(/*! react-is */ "../node_modules/prop-types/node_modules/react-is/index.js"); // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "../node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess); } else // removed by dead control flow {} /***/ }), /***/ "../node_modules/prop-types/lib/ReactPropTypesSecret.js": /*!**************************************************************!*\ !*** ../node_modules/prop-types/lib/ReactPropTypesSecret.js ***! \**************************************************************/ /***/ ((module) => { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; /***/ }), /***/ "../node_modules/prop-types/lib/has.js": /*!*********************************************!*\ !*** ../node_modules/prop-types/lib/has.js ***! \*********************************************/ /***/ ((module) => { module.exports = Function.call.bind(Object.prototype.hasOwnProperty); /***/ }), /***/ "../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js": /*!************************************************************************************!*\ !*** ../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js ***! \************************************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; /** @license React v16.13.1 * react-is.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (true) { (function() { 'use strict'; // The Symbol used to tag the ReactElement-like types. If there is no native Symbol // nor polyfill, then a plain number is used for performance. var hasSymbol = typeof Symbol === 'function' && Symbol.for; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary // (unstable) APIs that have been removed. Can we remove the symbols? var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; function isValidElementType(type) { return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); } function typeOf(object) { if (typeof object === 'object' && object !== null) { var $$typeof = object.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: var type = object.type; switch (type) { case REACT_ASYNC_MODE_TYPE: case REACT_CONCURRENT_MODE_TYPE: case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: return type; default: var $$typeofType = type && type.$$typeof; switch ($$typeofType) { case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: case REACT_PROVIDER_TYPE: return $$typeofType; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } return undefined; } // AsyncMode is deprecated along with isAsyncMode var AsyncMode = REACT_ASYNC_MODE_TYPE; var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; var ContextConsumer = REACT_CONTEXT_TYPE; var ContextProvider = REACT_PROVIDER_TYPE; var Element = REACT_ELEMENT_TYPE; var ForwardRef = REACT_FORWARD_REF_TYPE; var Fragment = REACT_FRAGMENT_TYPE; var Lazy = REACT_LAZY_TYPE; var Memo = REACT_MEMO_TYPE; var Portal = REACT_PORTAL_TYPE; var Profiler = REACT_PROFILER_TYPE; var StrictMode = REACT_STRICT_MODE_TYPE; var Suspense = REACT_SUSPENSE_TYPE; var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated function isAsyncMode(object) { { if (!hasWarnedAboutDeprecatedIsAsyncMode) { hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); } } return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; } function isConcurrentMode(object) { return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; } function isContextConsumer(object) { return typeOf(object) === REACT_CONTEXT_TYPE; } function isContextProvider(object) { return typeOf(object) === REACT_PROVIDER_TYPE; } function isElement(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; } function isForwardRef(object) { return typeOf(object) === REACT_FORWARD_REF_TYPE; } function isFragment(object) { return typeOf(object) === REACT_FRAGMENT_TYPE; } function isLazy(object) { return typeOf(object) === REACT_LAZY_TYPE; } function isMemo(object) { return typeOf(object) === REACT_MEMO_TYPE; } function isPortal(object) { return typeOf(object) === REACT_PORTAL_TYPE; } function isProfiler(object) { return typeOf(object) === REACT_PROFILER_TYPE; } function isStrictMode(object) { return typeOf(object) === REACT_STRICT_MODE_TYPE; } function isSuspense(object) { return typeOf(object) === REACT_SUSPENSE_TYPE; } exports.AsyncMode = AsyncMode; exports.ConcurrentMode = ConcurrentMode; exports.ContextConsumer = ContextConsumer; exports.ContextProvider = ContextProvider; exports.Element = Element; exports.ForwardRef = ForwardRef; exports.Fragment = Fragment; exports.Lazy = Lazy; exports.Memo = Memo; exports.Portal = Portal; exports.Profiler = Profiler; exports.StrictMode = StrictMode; exports.Suspense = Suspense; exports.isAsyncMode = isAsyncMode; exports.isConcurrentMode = isConcurrentMode; exports.isContextConsumer = isContextConsumer; exports.isContextProvider = isContextProvider; exports.isElement = isElement; exports.isForwardRef = isForwardRef; exports.isFragment = isFragment; exports.isLazy = isLazy; exports.isMemo = isMemo; exports.isPortal = isPortal; exports.isProfiler = isProfiler; exports.isStrictMode = isStrictMode; exports.isSuspense = isSuspense; exports.isValidElementType = isValidElementType; exports.typeOf = typeOf; })(); } /***/ }), /***/ "../node_modules/prop-types/node_modules/react-is/index.js": /*!*****************************************************************!*\ !*** ../node_modules/prop-types/node_modules/react-is/index.js ***! \*****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; if (false) // removed by dead control flow {} else { module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js"); } /***/ }), /***/ "../node_modules/react-dom/client.js": /*!*******************************************!*\ !*** ../node_modules/react-dom/client.js ***! \*******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var m = __webpack_require__(/*! react-dom */ "react-dom"); if (false) // removed by dead control flow {} else { var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; exports.createRoot = function(c, o) { i.usingClientEntryPoint = true; try { return m.createRoot(c, o); } finally { i.usingClientEntryPoint = false; } }; exports.hydrateRoot = function(c, h, o) { i.usingClientEntryPoint = true; try { return m.hydrateRoot(c, h, o); } finally { i.usingClientEntryPoint = false; } }; } /***/ }), /***/ "@elementor/icons": /*!************************************!*\ !*** external "elementorV2.icons" ***! \************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.icons; /***/ }), /***/ "@elementor/ui": /*!*********************************!*\ !*** external "elementorV2.ui" ***! \*********************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui; /***/ }), /***/ "@wordpress/i18n": /*!**************************!*\ !*** external "wp.i18n" ***! \**************************/ /***/ ((module) => { "use strict"; module.exports = wp.i18n; /***/ }), /***/ "react": /*!************************!*\ !*** external "React" ***! \************************/ /***/ ((module) => { "use strict"; module.exports = React; /***/ }), /***/ "react-dom": /*!***************************!*\ !*** external "ReactDOM" ***! \***************************/ /***/ ((module) => { "use strict"; module.exports = ReactDOM; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/amd options */ /******/ (() => { /******/ __webpack_require__.amdO = {}; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be in strict mode. (() => { "use strict"; /*!******************************************************!*\ !*** ../modules/promotions/assets/js/react/index.js ***! \******************************************************/ var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _module = _interopRequireDefault(__webpack_require__(/*! ./module.js */ "../modules/promotions/assets/js/react/module.js")); new _module.default(); })(); /******/ })() ; //# sourceMappingURL=e-react-promotions.js.map
| ver. 1.1 | |
.
| PHP 8.3.30 | Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтраницы: 0.39 |
proxy
|
phpinfo
|
ÐаÑтройка