diff --git a/.eslintrc.json b/.eslintrc.json
index 695d2c5..a03f5f6 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -42,7 +42,6 @@
         "no-multiple-empty-lines": "off",
         "prefer-destructuring": "off",
         "no-use-before-define": "off",
-        "eol-last": "off",
         "strict": "off",
         "lines-around-directive": "off",
         "consistent-return": "off",
diff --git a/player/js/3rd_party/BezierEaser.js b/player/js/3rd_party/BezierEaser.js
index 5e2dc6f..85b8634 100644
--- a/player/js/3rd_party/BezierEaser.js
+++ b/player/js/3rd_party/BezierEaser.js
@@ -153,4 +153,4 @@
 
     return ob;
 
-}());
\ No newline at end of file
+}());
diff --git a/player/js/3rd_party/howler.js b/player/js/3rd_party/howler.js
index 9f23efb..d8890e1 100644
--- a/player/js/3rd_party/howler.js
+++ b/player/js/3rd_party/howler.js
@@ -1,4 +1,4 @@
 /*! howler.js v2.2.0 | (c) 2013-2020, James Simpson of GoldFire Studios | MIT License | howlerjs.com */
 !function(){ "use strict";var e=function(){ this.init() };e.prototype={init:function(){ var e=this||n;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent="canplaythrough",e._navigator="undefined"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e },volume:function(e){ var o=this||n;if(e=parseFloat(e),o.ctx||_(),void 0!==e&&e>=0&&e<=1){ if(o._volume=e,o._muted)return o;o.usingWebAudio&&o.masterGain.gain.setValueAtTime(e,n.ctx.currentTime);for(var t=0;t<o._howls.length;t++)if(!o._howls[t]._webAudio)for(var r=o._howls[t]._getSoundIds(),a=0;a<r.length;a++){ var u=o._howls[t]._soundById(r[a]);u&&u._node&&(u._node.volume=u._volume*e) }return o }return o._volume },mute:function(e){ var o=this||n;o.ctx||_(),o._muted=e,o.usingWebAudio&&o.masterGain.gain.setValueAtTime(e?0:o._volume,n.ctx.currentTime);for(var t=0;t<o._howls.length;t++)if(!o._howls[t]._webAudio)for(var r=o._howls[t]._getSoundIds(),a=0;a<r.length;a++){ var u=o._howls[t]._soundById(r[a]);u&&u._node&&(u._node.muted=!!e||u._muted) }return o },stop:function(){ for(var e=this||n,o=0;o<e._howls.length;o++)e._howls[o].stop();return e },unload:function(){ for(var e=this||n,o=e._howls.length-1;o>=0;o--)e._howls[o].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,_()),e },codecs:function(e){ return(this||n)._codecs[e.replace(/^x-/,"")] },_setup:function(){ var e=this||n;if(e.state=e.ctx?e.ctx.state||"suspended":"suspended",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{ var o=new Audio;void 0===o.oncanplaythrough&&(e._canPlayEvent="canplay") }catch(n){ e.noAudio=!0 }else e.noAudio=!0;try{ var o=new Audio;o.muted&&(e.noAudio=!0) }catch(e){}return e.noAudio||e._setupCodecs(),e },_setupCodecs:function(){ var e=this||n,o=null;try{ o="undefined"!=typeof Audio?new Audio:null }catch(n){ return e }if(!o||"function"!=typeof o.canPlayType)return e;var t=o.canPlayType("audio/mpeg;").replace(/^no$/,""),r=e._navigator&&e._navigator.userAgent.match(/OPR\/([0-6].)/g),a=r&&parseInt(r[0].split("/")[1],10)<33;return e._codecs={mp3:!(a||!t&&!o.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!t,opus:!!o.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!o.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!o.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!o.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),aac:!!o.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!o.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(o.canPlayType("audio/x-m4a;")||o.canPlayType("audio/m4a;")||o.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(o.canPlayType("audio/x-m4b;")||o.canPlayType("audio/m4b;")||o.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(o.canPlayType("audio/x-mp4;")||o.canPlayType("audio/mp4;")||o.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!o.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,""),webm:!!o.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,""),dolby:!!o.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(o.canPlayType("audio/x-flac;")||o.canPlayType("audio/flac;")).replace(/^no$/,"")},e },_unlockAudio:function(){ var e=this||n;if(!e._audioUnlocked&&e.ctx){ e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var o=function(n){ for(;e._html5AudioPool.length<e.html5PoolSize;)try{ var t=new Audio;t._unlocked=!0,e._releaseHtml5Audio(t) }catch(n){ e.noAudio=!0;break }for(var r=0;r<e._howls.length;r++)if(!e._howls[r]._webAudio)for(var a=e._howls[r]._getSoundIds(),u=0;u<a.length;u++){ var i=e._howls[r]._soundById(a[u]);i&&i._node&&!i._node._unlocked&&(i._node._unlocked=!0,i._node.load()) }e._autoResume();var d=e.ctx.createBufferSource();d.buffer=e._scratchBuffer,d.connect(e.ctx.destination),void 0===d.start?d.noteOn(0):d.start(0),"function"==typeof e.ctx.resume&&e.ctx.resume(),d.onended=function(){ d.disconnect(0),e._audioUnlocked=!0,document.removeEventListener("touchstart",o,!0),document.removeEventListener("touchend",o,!0),document.removeEventListener("click",o,!0);for(var n=0;n<e._howls.length;n++)e._howls[n]._emit("unlock") } };return document.addEventListener("touchstart",o,!0),document.addEventListener("touchend",o,!0),document.addEventListener("click",o,!0),e } },_obtainHtml5Audio:function(){ var e=this||n;if(e._html5AudioPool.length)return e._html5AudioPool.pop();var o=(new Audio).play();return o&&"undefined"!=typeof Promise&&(o instanceof Promise||"function"==typeof o.then)&&o.catch(function(){ console.warn("HTML5 Audio pool exhausted, returning potentially locked audio object.") }),new Audio },_releaseHtml5Audio:function(e){ var o=this||n;return e._unlocked&&o._html5AudioPool.push(e),o },_autoSuspend:function(){ var e=this;if(e.autoSuspend&&e.ctx&&void 0!==e.ctx.suspend&&n.usingWebAudio){ for(var o=0;o<e._howls.length;o++)if(e._howls[o]._webAudio)for(var t=0;t<e._howls[o]._sounds.length;t++)if(!e._howls[o]._sounds[t]._paused)return e;return e._suspendTimer&&clearTimeout(e._suspendTimer),e._suspendTimer=setTimeout(function(){ if(e.autoSuspend){ e._suspendTimer=null,e.state="suspending";var n=function(){ e.state="suspended",e._resumeAfterSuspend&&(delete e._resumeAfterSuspend,e._autoResume()) };e.ctx.suspend().then(n,n) } },3e4),e } },_autoResume:function(){ var e=this;if(e.ctx&&void 0!==e.ctx.resume&&n.usingWebAudio)return"running"===e.state&&"interrupted"!==e.ctx.state&&e._suspendTimer?(clearTimeout(e._suspendTimer),e._suspendTimer=null):"suspended"===e.state||"running"===e.state&&"interrupted"===e.ctx.state?(e.ctx.resume().then(function(){ e.state="running";for(var n=0;n<e._howls.length;n++)e._howls[n]._emit("resume") }),e._suspendTimer&&(clearTimeout(e._suspendTimer),e._suspendTimer=null)):"suspending"===e.state&&(e._resumeAfterSuspend=!0),e }};var n=new e,o=function(e){ var n=this;if(!e.src||0===e.src.length)return void console.error("An array of source files must be passed with any new Howl.");n.init(e) };o.prototype={init:function(e){ var o=this;return n.ctx||_(),o._autoplay=e.autoplay||!1,o._format="string"!=typeof e.format?e.format:[e.format],o._html5=e.html5||!1,o._muted=e.mute||!1,o._loop=e.loop||!1,o._pool=e.pool||5,o._preload="boolean"!=typeof e.preload&&"metadata"!==e.preload||e.preload,o._rate=e.rate||1,o._sprite=e.sprite||{},o._src="string"!=typeof e.src?e.src:[e.src],o._volume=void 0!==e.volume?e.volume:1,o._xhr={method:e.xhr&&e.xhr.method?e.xhr.method:"GET",headers:e.xhr&&e.xhr.headers?e.xhr.headers:null,withCredentials:!(!e.xhr||!e.xhr.withCredentials)&&e.xhr.withCredentials},o._duration=0,o._state="unloaded",o._sounds=[],o._endTimers={},o._queue=[],o._playLock=!1,o._onend=e.onend?[{fn:e.onend}]:[],o._onfade=e.onfade?[{fn:e.onfade}]:[],o._onload=e.onload?[{fn:e.onload}]:[],o._onloaderror=e.onloaderror?[{fn:e.onloaderror}]:[],o._onplayerror=e.onplayerror?[{fn:e.onplayerror}]:[],o._onpause=e.onpause?[{fn:e.onpause}]:[],o._onplay=e.onplay?[{fn:e.onplay}]:[],o._onstop=e.onstop?[{fn:e.onstop}]:[],o._onmute=e.onmute?[{fn:e.onmute}]:[],o._onvolume=e.onvolume?[{fn:e.onvolume}]:[],o._onrate=e.onrate?[{fn:e.onrate}]:[],o._onseek=e.onseek?[{fn:e.onseek}]:[],o._onunlock=e.onunlock?[{fn:e.onunlock}]:[],o._onresume=[],o._webAudio=n.usingWebAudio&&!o._html5,void 0!==n.ctx&&n.ctx&&n.autoUnlock&&n._unlockAudio(),n._howls.push(o),o._autoplay&&o._queue.push({event:"play",action:function(){ o.play() }}),o._preload&&"none"!==o._preload&&o.load(),o },load:function(){ var e=this,o=null;if(n.noAudio)return void e._emit("loaderror",null,"No audio support.");"string"==typeof e._src&&(e._src=[e._src]);for(var r=0;r<e._src.length;r++){ var u,i;if(e._format&&e._format[r])u=e._format[r];else{ if("string"!=typeof(i=e._src[r])){ e._emit("loaderror",null,"Non-string found in selected audio sources - ignoring.");continue }u=/^data:audio\/([^;,]+);/i.exec(i),u||(u=/\.([^.]+)$/.exec(i.split("?",1)[0])),u&&(u=u[1].toLowerCase()) }if(u||console.warn('No file extension was found. Consider using the "format" property or specify an extension.'),u&&n.codecs(u)){ o=e._src[r];break } }return o?(e._src=o,e._state="loading","https:"===window.location.protocol&&"http:"===o.slice(0,5)&&(e._html5=!0,e._webAudio=!1),new t(e),e._webAudio&&a(e),e):void e._emit("loaderror",null,"No codec support for selected audio sources.") },play:function(e,o){ var t=this,r=null;if("number"==typeof e)r=e,e=null;else{ if("string"==typeof e&&"loaded"===t._state&&!t._sprite[e])return null;if(void 0===e&&(e="__default",!t._playLock)){ for(var a=0,u=0;u<t._sounds.length;u++)t._sounds[u]._paused&&!t._sounds[u]._ended&&(a++,r=t._sounds[u]._id);1===a?e=null:r=null } }var i=r?t._soundById(r):t._inactiveSound();if(!i)return null;if(r&&!e&&(e=i._sprite||"__default"),"loaded"!==t._state){ i._sprite=e,i._ended=!1;var d=i._id;return t._queue.push({event:"play",action:function(){ t.play(d) }}),d }if(r&&!i._paused)return o||t._loadQueue("play"),i._id;t._webAudio&&n._autoResume();var _=Math.max(0,i._seek>0?i._seek:t._sprite[e][0]/1e3),s=Math.max(0,(t._sprite[e][0]+t._sprite[e][1])/1e3-_),l=1e3*s/Math.abs(i._rate),c=t._sprite[e][0]/1e3,f=(t._sprite[e][0]+t._sprite[e][1])/1e3;i._sprite=e,i._ended=!1;var p=function(){ i._paused=!1,i._seek=_,i._start=c,i._stop=f,i._loop=!(!i._loop&&!t._sprite[e][2]) };if(_>=f)return void t._ended(i);var m=i._node;if(t._webAudio){ var v=function(){ t._playLock=!1,p(),t._refreshBuffer(i);var e=i._muted||t._muted?0:i._volume;m.gain.setValueAtTime(e,n.ctx.currentTime),i._playStart=n.ctx.currentTime,void 0===m.bufferSource.start?i._loop?m.bufferSource.noteGrainOn(0,_,86400):m.bufferSource.noteGrainOn(0,_,s):i._loop?m.bufferSource.start(0,_,86400):m.bufferSource.start(0,_,s),l!==1/0&&(t._endTimers[i._id]=setTimeout(t._ended.bind(t,i),l)),o||setTimeout(function(){ t._emit("play",i._id),t._loadQueue() },0) };"running"===n.state&&"interrupted"!==n.ctx.state?v():(t._playLock=!0,t.once("resume",v),t._clearTimer(i._id)) }else{ var h=function(){ m.currentTime=_,m.muted=i._muted||t._muted||n._muted||m.muted,m.volume=i._volume*n.volume(),m.playbackRate=i._rate;try{ var r=m.play();if(r&&"undefined"!=typeof Promise&&(r instanceof Promise||"function"==typeof r.then)?(t._playLock=!0,p(),r.then(function(){ t._playLock=!1,m._unlocked=!0,o||(t._emit("play",i._id),t._loadQueue()) }).catch(function(){ t._playLock=!1,t._emit("playerror",i._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),i._ended=!0,i._paused=!0 })):o||(t._playLock=!1,p(),t._emit("play",i._id),t._loadQueue()),m.playbackRate=i._rate,m.paused)return void t._emit("playerror",i._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");"__default"!==e||i._loop?t._endTimers[i._id]=setTimeout(t._ended.bind(t,i),l):(t._endTimers[i._id]=function(){ t._ended(i),m.removeEventListener("ended",t._endTimers[i._id],!1) },m.addEventListener("ended",t._endTimers[i._id],!1)) }catch(e){ t._emit("playerror",i._id,e) } };"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"===m.src&&(m.src=t._src,m.load());var y=window&&window.ejecta||!m.readyState&&n._navigator.isCocoonJS;if(m.readyState>=3||y)h();else{ t._playLock=!0;var g=function(){ h(),m.removeEventListener(n._canPlayEvent,g,!1) };m.addEventListener(n._canPlayEvent,g,!1),t._clearTimer(i._id) } }return i._id },pause:function(e){ var n=this;if("loaded"!==n._state||n._playLock)return n._queue.push({event:"pause",action:function(){ n.pause(e) }}),n;for(var o=n._getSoundIds(e),t=0;t<o.length;t++){ n._clearTimer(o[t]);var r=n._soundById(o[t]);if(r&&!r._paused&&(r._seek=n.seek(o[t]),r._rateSeek=0,r._paused=!0,n._stopFade(o[t]),r._node))if(n._webAudio){ if(!r._node.bufferSource)continue;void 0===r._node.bufferSource.stop?r._node.bufferSource.noteOff(0):r._node.bufferSource.stop(0),n._cleanBuffer(r._node) }else isNaN(r._node.duration)&&r._node.duration!==1/0||r._node.pause();arguments[1]||n._emit("pause",r?r._id:null) }return n },stop:function(e,n){ var o=this;if("loaded"!==o._state||o._playLock)return o._queue.push({event:"stop",action:function(){ o.stop(e) }}),o;for(var t=o._getSoundIds(e),r=0;r<t.length;r++){ o._clearTimer(t[r]);var a=o._soundById(t[r]);a&&(a._seek=a._start||0,a._rateSeek=0,a._paused=!0,a._ended=!0,o._stopFade(t[r]),a._node&&(o._webAudio?a._node.bufferSource&&(void 0===a._node.bufferSource.stop?a._node.bufferSource.noteOff(0):a._node.bufferSource.stop(0),o._cleanBuffer(a._node)):isNaN(a._node.duration)&&a._node.duration!==1/0||(a._node.currentTime=a._start||0,a._node.pause(),a._node.duration===1/0&&o._clearSound(a._node))),n||o._emit("stop",a._id)) }return o },mute:function(e,o){ var t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"mute",action:function(){ t.mute(e,o) }}),t;if(void 0===o){ if("boolean"!=typeof e)return t._muted;t._muted=e }for(var r=t._getSoundIds(o),a=0;a<r.length;a++){ var u=t._soundById(r[a]);u&&(u._muted=e,u._interval&&t._stopFade(u._id),t._webAudio&&u._node?u._node.gain.setValueAtTime(e?0:u._volume,n.ctx.currentTime):u._node&&(u._node.muted=!!n._muted||e),t._emit("mute",u._id)) }return t },volume:function(){ var e,o,t=this,r=arguments;if(0===r.length)return t._volume;if(1===r.length||2===r.length&&void 0===r[1]){ t._getSoundIds().indexOf(r[0])>=0?o=parseInt(r[0],10):e=parseFloat(r[0]) }else r.length>=2&&(e=parseFloat(r[0]),o=parseInt(r[1],10));var a;if(!(void 0!==e&&e>=0&&e<=1))return a=o?t._soundById(o):t._sounds[0],a?a._volume:0;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"volume",action:function(){ t.volume.apply(t,r) }}),t;void 0===o&&(t._volume=e),o=t._getSoundIds(o);for(var u=0;u<o.length;u++)(a=t._soundById(o[u]))&&(a._volume=e,r[2]||t._stopFade(o[u]),t._webAudio&&a._node&&!a._muted?a._node.gain.setValueAtTime(e,n.ctx.currentTime):a._node&&!a._muted&&(a._node.volume=e*n.volume()),t._emit("volume",a._id));return t },fade:function(e,o,t,r){ var a=this;if("loaded"!==a._state||a._playLock)return a._queue.push({event:"fade",action:function(){ a.fade(e,o,t,r) }}),a;e=Math.min(Math.max(0,parseFloat(e)),1),o=Math.min(Math.max(0,parseFloat(o)),1),t=parseFloat(t),a.volume(e,r);for(var u=a._getSoundIds(r),i=0;i<u.length;i++){ var d=a._soundById(u[i]);if(d){ if(r||a._stopFade(u[i]),a._webAudio&&!d._muted){ var _=n.ctx.currentTime,s=_+t/1e3;d._volume=e,d._node.gain.setValueAtTime(e,_),d._node.gain.linearRampToValueAtTime(o,s) }a._startFadeInterval(d,e,o,t,u[i],void 0===r) } }return a },_startFadeInterval:function(e,n,o,t,r,a){ var u=this,i=n,d=o-n,_=Math.abs(d/.01),s=Math.max(4,_>0?t/_:t),l=Date.now();e._fadeTo=o,e._interval=setInterval(function(){ var r=(Date.now()-l)/t;l=Date.now(),i+=d*r,i=d<0?Math.max(o,i):Math.min(o,i),i=Math.round(100*i)/100,u._webAudio?e._volume=i:u.volume(i,e._id,!0),a&&(u._volume=i),(o<n&&i<=o||o>n&&i>=o)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,u.volume(o,e._id),u._emit("fade",e._id)) },s) },_stopFade:function(e){ var o=this,t=o._soundById(e);return t&&t._interval&&(o._webAudio&&t._node.gain.cancelScheduledValues(n.ctx.currentTime),clearInterval(t._interval),t._interval=null,o.volume(t._fadeTo,e),t._fadeTo=null,o._emit("fade",e)),o },loop:function(){ var e,n,o,t=this,r=arguments;if(0===r.length)return t._loop;if(1===r.length){ if("boolean"!=typeof r[0])return!!(o=t._soundById(parseInt(r[0],10)))&&o._loop;e=r[0],t._loop=e }else 2===r.length&&(e=r[0],n=parseInt(r[1],10));for(var a=t._getSoundIds(n),u=0;u<a.length;u++)(o=t._soundById(a[u]))&&(o._loop=e,t._webAudio&&o._node&&o._node.bufferSource&&(o._node.bufferSource.loop=e,e&&(o._node.bufferSource.loopStart=o._start||0,o._node.bufferSource.loopEnd=o._stop)));return t },rate:function(){ var e,o,t=this,r=arguments;if(0===r.length)o=t._sounds[0]._id;else if(1===r.length){ var a=t._getSoundIds(),u=a.indexOf(r[0]);u>=0?o=parseInt(r[0],10):e=parseFloat(r[0]) }else 2===r.length&&(e=parseFloat(r[0]),o=parseInt(r[1],10));var i;if("number"!=typeof e)return i=t._soundById(o),i?i._rate:t._rate;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"rate",action:function(){ t.rate.apply(t,r) }}),t;void 0===o&&(t._rate=e),o=t._getSoundIds(o);for(var d=0;d<o.length;d++)if(i=t._soundById(o[d])){ t.playing(o[d])&&(i._rateSeek=t.seek(o[d]),i._playStart=t._webAudio?n.ctx.currentTime:i._playStart),i._rate=e,t._webAudio&&i._node&&i._node.bufferSource?i._node.bufferSource.playbackRate.setValueAtTime(e,n.ctx.currentTime):i._node&&(i._node.playbackRate=e);var _=t.seek(o[d]),s=(t._sprite[i._sprite][0]+t._sprite[i._sprite][1])/1e3-_,l=1e3*s/Math.abs(i._rate);!t._endTimers[o[d]]&&i._paused||(t._clearTimer(o[d]),t._endTimers[o[d]]=setTimeout(t._ended.bind(t,i),l)),t._emit("rate",i._id) }return t },seek:function(){ var e,o,t=this,r=arguments;if(0===r.length)o=t._sounds[0]._id;else if(1===r.length){ var a=t._getSoundIds(),u=a.indexOf(r[0]);u>=0?o=parseInt(r[0],10):t._sounds.length&&(o=t._sounds[0]._id,e=parseFloat(r[0])) }else 2===r.length&&(e=parseFloat(r[0]),o=parseInt(r[1],10));if(void 0===o)return t;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"seek",action:function(){ t.seek.apply(t,r) }}),t;var i=t._soundById(o);if(i){ if(!("number"==typeof e&&e>=0)){ if(t._webAudio){ var d=t.playing(o)?n.ctx.currentTime-i._playStart:0,_=i._rateSeek?i._rateSeek-i._seek:0;return i._seek+(_+d*Math.abs(i._rate)) }return i._node.currentTime }var s=t.playing(o);s&&t.pause(o,!0),i._seek=e,i._ended=!1,t._clearTimer(o),t._webAudio||!i._node||isNaN(i._node.duration)||(i._node.currentTime=e);var l=function(){ t._emit("seek",o),s&&t.play(o,!0) };if(s&&!t._webAudio){ var c=function(){ t._playLock?setTimeout(c,0):l() };setTimeout(c,0) }else l() }return t },playing:function(e){ var n=this;if("number"==typeof e){ var o=n._soundById(e);return!!o&&!o._paused }for(var t=0;t<n._sounds.length;t++)if(!n._sounds[t]._paused)return!0;return!1 },duration:function(e){ var n=this,o=n._duration,t=n._soundById(e);return t&&(o=n._sprite[t._sprite][1]/1e3),o },state:function(){ return this._state },unload:function(){ for(var e=this,o=e._sounds,t=0;t<o.length;t++)o[t]._paused||e.stop(o[t]._id),e._webAudio||(e._clearSound(o[t]._node),o[t]._node.removeEventListener("error",o[t]._errorFn,!1),o[t]._node.removeEventListener(n._canPlayEvent,o[t]._loadFn,!1),n._releaseHtml5Audio(o[t]._node)),delete o[t]._node,e._clearTimer(o[t]._id);var a=n._howls.indexOf(e);a>=0&&n._howls.splice(a,1);var u=!0;for(t=0;t<n._howls.length;t++)if(n._howls[t]._src===e._src||e._src.indexOf(n._howls[t]._src)>=0){ u=!1;break }return r&&u&&delete r[e._src],n.noAudio=!1,e._state="unloaded",e._sounds=[],e=null,null },on:function(e,n,o,t){ var r=this,a=r["_on"+e];return"function"==typeof n&&a.push(t?{id:o,fn:n,once:t}:{id:o,fn:n}),r },off:function(e,n,o){ var t=this,r=t["_on"+e],a=0;if("number"==typeof n&&(o=n,n=null),n||o)for(a=0;a<r.length;a++){ var u=o===r[a].id;if(n===r[a].fn&&u||!n&&u){ r.splice(a,1);break } }else if(e)t["_on"+e]=[];else{ var i=Object.keys(t);for(a=0;a<i.length;a++)0===i[a].indexOf("_on")&&Array.isArray(t[i[a]])&&(t[i[a]]=[]) }return t },once:function(e,n,o){ var t=this;return t.on(e,n,o,1),t },_emit:function(e,n,o){ for(var t=this,r=t["_on"+e],a=r.length-1;a>=0;a--)r[a].id&&r[a].id!==n&&"load"!==e||(setTimeout(function(e){ e.call(this,n,o) }.bind(t,r[a].fn),0),r[a].once&&t.off(e,r[a].fn,r[a].id));return t._loadQueue(e),t },_loadQueue:function(e){ var n=this;if(n._queue.length>0){ var o=n._queue[0];o.event===e&&(n._queue.shift(),n._loadQueue()),e||o.action() }return n },_ended:function(e){ var o=this,t=e._sprite;if(!o._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime<e._stop)return setTimeout(o._ended.bind(o,e),100),o;var r=!(!e._loop&&!o._sprite[t][2]);if(o._emit("end",e._id),!o._webAudio&&r&&o.stop(e._id,!0).play(e._id),o._webAudio&&r){ o._emit("play",e._id),e._seek=e._start||0,e._rateSeek=0,e._playStart=n.ctx.currentTime;var a=1e3*(e._stop-e._start)/Math.abs(e._rate);o._endTimers[e._id]=setTimeout(o._ended.bind(o,e),a) }return o._webAudio&&!r&&(e._paused=!0,e._ended=!0,e._seek=e._start||0,e._rateSeek=0,o._clearTimer(e._id),o._cleanBuffer(e._node),n._autoSuspend()),o._webAudio||r||o.stop(e._id,!0),o },_clearTimer:function(e){ var n=this;if(n._endTimers[e]){ if("function"!=typeof n._endTimers[e])clearTimeout(n._endTimers[e]);else{ var o=n._soundById(e);o&&o._node&&o._node.removeEventListener("ended",n._endTimers[e],!1) }delete n._endTimers[e] }return n },_soundById:function(e){ for(var n=this,o=0;o<n._sounds.length;o++)if(e===n._sounds[o]._id)return n._sounds[o];return null },_inactiveSound:function(){ var e=this;e._drain();for(var n=0;n<e._sounds.length;n++)if(e._sounds[n]._ended)return e._sounds[n].reset();return new t(e) },_drain:function(){ var e=this,n=e._pool,o=0,t=0;if(!(e._sounds.length<n)){ for(t=0;t<e._sounds.length;t++)e._sounds[t]._ended&&o++;for(t=e._sounds.length-1;t>=0;t--){ if(o<=n)return;e._sounds[t]._ended&&(e._webAudio&&e._sounds[t]._node&&e._sounds[t]._node.disconnect(0),e._sounds.splice(t,1),o--) } } },_getSoundIds:function(e){ var n=this;if(void 0===e){ for(var o=[],t=0;t<n._sounds.length;t++)o.push(n._sounds[t]._id);return o }return[e] },_refreshBuffer:function(e){ var o=this;return e._node.bufferSource=n.ctx.createBufferSource(),e._node.bufferSource.buffer=r[o._src],e._panner?e._node.bufferSource.connect(e._panner):e._node.bufferSource.connect(e._node),e._node.bufferSource.loop=e._loop,e._loop&&(e._node.bufferSource.loopStart=e._start||0,e._node.bufferSource.loopEnd=e._stop||0),e._node.bufferSource.playbackRate.setValueAtTime(e._rate,n.ctx.currentTime),o },_cleanBuffer:function(e){ var o=this,t=n._navigator&&n._navigator.vendor.indexOf("Apple")>=0;if(n._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),t))try{ e.bufferSource.buffer=n._scratchBuffer }catch(e){}return e.bufferSource=null,o },_clearSound:function(e){ /MSIE |Trident\//.test(n._navigator&&n._navigator.userAgent)||(e.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA") }};var t=function(e){ this._parent=e,this.init() };t.prototype={init:function(){ var e=this,o=e._parent;return e._muted=o._muted,e._loop=o._loop,e._volume=o._volume,e._rate=o._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++n._counter,o._sounds.push(e),e.create(),e },create:function(){ var e=this,o=e._parent,t=n._muted||e._muted||e._parent._muted?0:e._volume;return o._webAudio?(e._node=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),e._node.gain.setValueAtTime(t,n.ctx.currentTime),e._node.paused=!0,e._node.connect(n.masterGain)):n.noAudio||(e._node=n._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener("error",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(n._canPlayEvent,e._loadFn,!1),e._node.src=o._src,e._node.preload=!0===o._preload?"auto":o._preload,e._node.volume=t*n.volume(),e._node.load()),e },reset:function(){ var e=this,o=e._parent;return e._muted=o._muted,e._loop=o._loop,e._volume=o._volume,e._rate=o._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite="__default",e._id=++n._counter,e },_errorListener:function(){ var e=this;e._parent._emit("loaderror",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener("error",e._errorFn,!1) },_loadListener:function(){ var e=this,o=e._parent;o._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(o._sprite).length&&(o._sprite={__default:[0,1e3*o._duration]}),"loaded"!==o._state&&(o._state="loaded",o._emit("load"),o._loadQueue()),e._node.removeEventListener(n._canPlayEvent,e._loadFn,!1) }};var r={},a=function(e){ var n=e._src;if(r[n])return e._duration=r[n].duration,void d(e);if(/^data:[^;]+;base64,/.test(n)){ for(var o=atob(n.split(",")[1]),t=new Uint8Array(o.length),a=0;a<o.length;++a)t[a]=o.charCodeAt(a);i(t.buffer,e) }else{ var _=new XMLHttpRequest;_.open(e._xhr.method,n,!0),_.withCredentials=e._xhr.withCredentials,_.responseType="arraybuffer",e._xhr.headers&&Object.keys(e._xhr.headers).forEach(function(n){ _.setRequestHeader(n,e._xhr.headers[n]) }),_.onload=function(){ var n=(_.status+"")[0];if("0"!==n&&"2"!==n&&"3"!==n)return void e._emit("loaderror",null,"Failed loading audio file with status: "+_.status+".");i(_.response,e) },_.onerror=function(){ e._webAudio&&(e._html5=!0,e._webAudio=!1,e._sounds=[],delete r[n],e.load()) },u(_) } },u=function(e){ try{ e.send() }catch(n){ e.onerror() } },i=function(e,o){ var t=function(){ o._emit("loaderror",null,"Decoding audio data failed.") },a=function(e){ e&&o._sounds.length>0?(r[o._src]=e,d(o,e)):t() };"undefined"!=typeof Promise&&1===n.ctx.decodeAudioData.length?n.ctx.decodeAudioData(e).then(a).catch(t):n.ctx.decodeAudioData(e,a,t) },d=function(e,n){ n&&!e._duration&&(e._duration=n.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),"loaded"!==e._state&&(e._state="loaded",e._emit("load"),e._loadQueue()) },_=function(){ if(n.usingWebAudio){ try{ "undefined"!=typeof AudioContext?n.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?n.ctx=new webkitAudioContext:n.usingWebAudio=!1 }catch(e){ n.usingWebAudio=!1 }n.ctx||(n.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(n._navigator&&n._navigator.platform),o=n._navigator&&n._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),t=o?parseInt(o[1],10):null;if(e&&t&&t<9){ var r=/safari/.test(n._navigator&&n._navigator.userAgent.toLowerCase());n._navigator&&!r&&(n.usingWebAudio=!1) }n.usingWebAudio&&(n.masterGain=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),n.masterGain.gain.setValueAtTime(n._muted?0:n._volume,n.ctx.currentTime),n.masterGain.connect(n.ctx.destination)),n._setup() } };"function"==typeof define&&define.amd&&define([],function(){ return{Howler:n,Howl:o} }),"undefined"!=typeof exports&&(exports.Howler=n,exports.Howl=o),"undefined"!=typeof global?(global.HowlerGlobal=e,global.Howler=n,global.Howl=o,global.Sound=t):"undefined"!=typeof window&&(window.HowlerGlobal=e,window.Howler=n,window.Howl=o,window.Sound=t) }();
 /*! Spatial Plugin */
-!function(){ "use strict";HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(e){ var n=this;if(!n.ctx||!n.ctx.listener)return n;for(var t=n._howls.length-1;t>=0;t--)n._howls[t].stereo(e);return n },HowlerGlobal.prototype.pos=function(e,n,t){ var r=this;return r.ctx&&r.ctx.listener?(n="number"!=typeof n?r._pos[1]:n,t="number"!=typeof t?r._pos[2]:t,"number"!=typeof e?r._pos:(r._pos=[e,n,t],void 0!==r.ctx.listener.positionX?(r.ctx.listener.positionX.setTargetAtTime(r._pos[0],Howler.ctx.currentTime,.1),r.ctx.listener.positionY.setTargetAtTime(r._pos[1],Howler.ctx.currentTime,.1),r.ctx.listener.positionZ.setTargetAtTime(r._pos[2],Howler.ctx.currentTime,.1)):r.ctx.listener.setPosition(r._pos[0],r._pos[1],r._pos[2]),r)):r },HowlerGlobal.prototype.orientation=function(e,n,t,r,o,i){ var a=this;if(!a.ctx||!a.ctx.listener)return a;var s=a._orientation;return n="number"!=typeof n?s[1]:n,t="number"!=typeof t?s[2]:t,r="number"!=typeof r?s[3]:r,o="number"!=typeof o?s[4]:o,i="number"!=typeof i?s[5]:i,"number"!=typeof e?s:(a._orientation=[e,n,t,r,o,i],void 0!==a.ctx.listener.forwardX?(a.ctx.listener.forwardX.setTargetAtTime(e,Howler.ctx.currentTime,.1),a.ctx.listener.forwardY.setTargetAtTime(n,Howler.ctx.currentTime,.1),a.ctx.listener.forwardZ.setTargetAtTime(t,Howler.ctx.currentTime,.1),a.ctx.listener.upX.setTargetAtTime(r,Howler.ctx.currentTime,.1),a.ctx.listener.upY.setTargetAtTime(o,Howler.ctx.currentTime,.1),a.ctx.listener.upZ.setTargetAtTime(i,Howler.ctx.currentTime,.1)):a.ctx.listener.setOrientation(e,n,t,r,o,i),a) },Howl.prototype.init=function(e){ return function(n){ var t=this;return t._orientation=n.orientation||[1,0,0],t._stereo=n.stereo||null,t._pos=n.pos||null,t._pannerAttr={coneInnerAngle:void 0!==n.coneInnerAngle?n.coneInnerAngle:360,coneOuterAngle:void 0!==n.coneOuterAngle?n.coneOuterAngle:360,coneOuterGain:void 0!==n.coneOuterGain?n.coneOuterGain:0,distanceModel:void 0!==n.distanceModel?n.distanceModel:"inverse",maxDistance:void 0!==n.maxDistance?n.maxDistance:1e4,panningModel:void 0!==n.panningModel?n.panningModel:"HRTF",refDistance:void 0!==n.refDistance?n.refDistance:1,rolloffFactor:void 0!==n.rolloffFactor?n.rolloffFactor:1},t._onstereo=n.onstereo?[{fn:n.onstereo}]:[],t._onpos=n.onpos?[{fn:n.onpos}]:[],t._onorientation=n.onorientation?[{fn:n.onorientation}]:[],e.call(this,n) } }(Howl.prototype.init),Howl.prototype.stereo=function(n,t){ var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){ r.stereo(n,t) }}),r;var o=void 0===Howler.ctx.createStereoPanner?"spatial":"stereo";if(void 0===t){ if("number"!=typeof n)return r._stereo;r._stereo=n,r._pos=[n,0,0] }for(var i=r._getSoundIds(t),a=0;a<i.length;a++){ var s=r._soundById(i[a]);if(s){ if("number"!=typeof n)return s._stereo;s._stereo=n,s._pos=[n,0,0],s._node&&(s._pannerAttr.panningModel="equalpower",s._panner&&s._panner.pan||e(s,o),"spatial"===o?void 0!==s._panner.positionX?(s._panner.positionX.setValueAtTime(n,Howler.ctx.currentTime),s._panner.positionY.setValueAtTime(0,Howler.ctx.currentTime),s._panner.positionZ.setValueAtTime(0,Howler.ctx.currentTime)):s._panner.setPosition(n,0,0):s._panner.pan.setValueAtTime(n,Howler.ctx.currentTime)),r._emit("stereo",s._id) } }return r },Howl.prototype.pos=function(n,t,r,o){ var i=this;if(!i._webAudio)return i;if("loaded"!==i._state)return i._queue.push({event:"pos",action:function(){ i.pos(n,t,r,o) }}),i;if(t="number"!=typeof t?0:t,r="number"!=typeof r?-.5:r,void 0===o){ if("number"!=typeof n)return i._pos;i._pos=[n,t,r] }for(var a=i._getSoundIds(o),s=0;s<a.length;s++){ var p=i._soundById(a[s]);if(p){ if("number"!=typeof n)return p._pos;p._pos=[n,t,r],p._node&&(p._panner&&!p._panner.pan||e(p,"spatial"),void 0!==p._panner.positionX?(p._panner.positionX.setValueAtTime(n,Howler.ctx.currentTime),p._panner.positionY.setValueAtTime(t,Howler.ctx.currentTime),p._panner.positionZ.setValueAtTime(r,Howler.ctx.currentTime)):p._panner.setPosition(n,t,r)),i._emit("pos",p._id) } }return i },Howl.prototype.orientation=function(n,t,r,o){ var i=this;if(!i._webAudio)return i;if("loaded"!==i._state)return i._queue.push({event:"orientation",action:function(){ i.orientation(n,t,r,o) }}),i;if(t="number"!=typeof t?i._orientation[1]:t,r="number"!=typeof r?i._orientation[2]:r,void 0===o){ if("number"!=typeof n)return i._orientation;i._orientation=[n,t,r] }for(var a=i._getSoundIds(o),s=0;s<a.length;s++){ var p=i._soundById(a[s]);if(p){ if("number"!=typeof n)return p._orientation;p._orientation=[n,t,r],p._node&&(p._panner||(p._pos||(p._pos=i._pos||[0,0,-.5]),e(p,"spatial")),void 0!==p._panner.orientationX?(p._panner.orientationX.setValueAtTime(n,Howler.ctx.currentTime),p._panner.orientationY.setValueAtTime(t,Howler.ctx.currentTime),p._panner.orientationZ.setValueAtTime(r,Howler.ctx.currentTime)):p._panner.setOrientation(n,t,r)),i._emit("orientation",p._id) } }return i },Howl.prototype.pannerAttr=function(){ var n,t,r,o=this,i=arguments;if(!o._webAudio)return o;if(0===i.length)return o._pannerAttr;if(1===i.length){ if("object"!=typeof i[0])return r=o._soundById(parseInt(i[0],10)),r?r._pannerAttr:o._pannerAttr;n=i[0],void 0===t&&(n.pannerAttr||(n.pannerAttr={coneInnerAngle:n.coneInnerAngle,coneOuterAngle:n.coneOuterAngle,coneOuterGain:n.coneOuterGain,distanceModel:n.distanceModel,maxDistance:n.maxDistance,refDistance:n.refDistance,rolloffFactor:n.rolloffFactor,panningModel:n.panningModel}),o._pannerAttr={coneInnerAngle:void 0!==n.pannerAttr.coneInnerAngle?n.pannerAttr.coneInnerAngle:o._coneInnerAngle,coneOuterAngle:void 0!==n.pannerAttr.coneOuterAngle?n.pannerAttr.coneOuterAngle:o._coneOuterAngle,coneOuterGain:void 0!==n.pannerAttr.coneOuterGain?n.pannerAttr.coneOuterGain:o._coneOuterGain,distanceModel:void 0!==n.pannerAttr.distanceModel?n.pannerAttr.distanceModel:o._distanceModel,maxDistance:void 0!==n.pannerAttr.maxDistance?n.pannerAttr.maxDistance:o._maxDistance,refDistance:void 0!==n.pannerAttr.refDistance?n.pannerAttr.refDistance:o._refDistance,rolloffFactor:void 0!==n.pannerAttr.rolloffFactor?n.pannerAttr.rolloffFactor:o._rolloffFactor,panningModel:void 0!==n.pannerAttr.panningModel?n.pannerAttr.panningModel:o._panningModel}) }else 2===i.length&&(n=i[0],t=parseInt(i[1],10));for(var a=o._getSoundIds(t),s=0;s<a.length;s++)if(r=o._soundById(a[s])){ var p=r._pannerAttr;p={coneInnerAngle:void 0!==n.coneInnerAngle?n.coneInnerAngle:p.coneInnerAngle,coneOuterAngle:void 0!==n.coneOuterAngle?n.coneOuterAngle:p.coneOuterAngle,coneOuterGain:void 0!==n.coneOuterGain?n.coneOuterGain:p.coneOuterGain,distanceModel:void 0!==n.distanceModel?n.distanceModel:p.distanceModel,maxDistance:void 0!==n.maxDistance?n.maxDistance:p.maxDistance,refDistance:void 0!==n.refDistance?n.refDistance:p.refDistance,rolloffFactor:void 0!==n.rolloffFactor?n.rolloffFactor:p.rolloffFactor,panningModel:void 0!==n.panningModel?n.panningModel:p.panningModel};var c=r._panner;c?(c.coneInnerAngle=p.coneInnerAngle,c.coneOuterAngle=p.coneOuterAngle,c.coneOuterGain=p.coneOuterGain,c.distanceModel=p.distanceModel,c.maxDistance=p.maxDistance,c.refDistance=p.refDistance,c.rolloffFactor=p.rolloffFactor,c.panningModel=p.panningModel):(r._pos||(r._pos=o._pos||[0,0,-.5]),e(r,"spatial")) }return o },Sound.prototype.init=function(e){ return function(){ var n=this,t=n._parent;n._orientation=t._orientation,n._stereo=t._stereo,n._pos=t._pos,n._pannerAttr=t._pannerAttr,e.call(this),n._stereo?t.stereo(n._stereo):n._pos&&t.pos(n._pos[0],n._pos[1],n._pos[2],n._id) } }(Sound.prototype.init),Sound.prototype.reset=function(e){ return function(){ var n=this,t=n._parent;return n._orientation=t._orientation,n._stereo=t._stereo,n._pos=t._pos,n._pannerAttr=t._pannerAttr,n._stereo?t.stereo(n._stereo):n._pos?t.pos(n._pos[0],n._pos[1],n._pos[2],n._id):n._panner&&(n._panner.disconnect(0),n._panner=void 0,t._refreshBuffer(n)),e.call(this) } }(Sound.prototype.reset);var e=function(e,n){ n=n||"spatial","spatial"===n?(e._panner=Howler.ctx.createPanner(),e._panner.coneInnerAngle=e._pannerAttr.coneInnerAngle,e._panner.coneOuterAngle=e._pannerAttr.coneOuterAngle,e._panner.coneOuterGain=e._pannerAttr.coneOuterGain,e._panner.distanceModel=e._pannerAttr.distanceModel,e._panner.maxDistance=e._pannerAttr.maxDistance,e._panner.refDistance=e._pannerAttr.refDistance,e._panner.rolloffFactor=e._pannerAttr.rolloffFactor,e._panner.panningModel=e._pannerAttr.panningModel,void 0!==e._panner.positionX?(e._panner.positionX.setValueAtTime(e._pos[0],Howler.ctx.currentTime),e._panner.positionY.setValueAtTime(e._pos[1],Howler.ctx.currentTime),e._panner.positionZ.setValueAtTime(e._pos[2],Howler.ctx.currentTime)):e._panner.setPosition(e._pos[0],e._pos[1],e._pos[2]),void 0!==e._panner.orientationX?(e._panner.orientationX.setValueAtTime(e._orientation[0],Howler.ctx.currentTime),e._panner.orientationY.setValueAtTime(e._orientation[1],Howler.ctx.currentTime),e._panner.orientationZ.setValueAtTime(e._orientation[2],Howler.ctx.currentTime)):e._panner.setOrientation(e._orientation[0],e._orientation[1],e._orientation[2])):(e._panner=Howler.ctx.createStereoPanner(),e._panner.pan.setValueAtTime(e._stereo,Howler.ctx.currentTime)),e._panner.connect(e._node),e._paused||e._parent.pause(e._id,!0).play(e._id,!0) } }();
\ No newline at end of file
+!function(){ "use strict";HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(e){ var n=this;if(!n.ctx||!n.ctx.listener)return n;for(var t=n._howls.length-1;t>=0;t--)n._howls[t].stereo(e);return n },HowlerGlobal.prototype.pos=function(e,n,t){ var r=this;return r.ctx&&r.ctx.listener?(n="number"!=typeof n?r._pos[1]:n,t="number"!=typeof t?r._pos[2]:t,"number"!=typeof e?r._pos:(r._pos=[e,n,t],void 0!==r.ctx.listener.positionX?(r.ctx.listener.positionX.setTargetAtTime(r._pos[0],Howler.ctx.currentTime,.1),r.ctx.listener.positionY.setTargetAtTime(r._pos[1],Howler.ctx.currentTime,.1),r.ctx.listener.positionZ.setTargetAtTime(r._pos[2],Howler.ctx.currentTime,.1)):r.ctx.listener.setPosition(r._pos[0],r._pos[1],r._pos[2]),r)):r },HowlerGlobal.prototype.orientation=function(e,n,t,r,o,i){ var a=this;if(!a.ctx||!a.ctx.listener)return a;var s=a._orientation;return n="number"!=typeof n?s[1]:n,t="number"!=typeof t?s[2]:t,r="number"!=typeof r?s[3]:r,o="number"!=typeof o?s[4]:o,i="number"!=typeof i?s[5]:i,"number"!=typeof e?s:(a._orientation=[e,n,t,r,o,i],void 0!==a.ctx.listener.forwardX?(a.ctx.listener.forwardX.setTargetAtTime(e,Howler.ctx.currentTime,.1),a.ctx.listener.forwardY.setTargetAtTime(n,Howler.ctx.currentTime,.1),a.ctx.listener.forwardZ.setTargetAtTime(t,Howler.ctx.currentTime,.1),a.ctx.listener.upX.setTargetAtTime(r,Howler.ctx.currentTime,.1),a.ctx.listener.upY.setTargetAtTime(o,Howler.ctx.currentTime,.1),a.ctx.listener.upZ.setTargetAtTime(i,Howler.ctx.currentTime,.1)):a.ctx.listener.setOrientation(e,n,t,r,o,i),a) },Howl.prototype.init=function(e){ return function(n){ var t=this;return t._orientation=n.orientation||[1,0,0],t._stereo=n.stereo||null,t._pos=n.pos||null,t._pannerAttr={coneInnerAngle:void 0!==n.coneInnerAngle?n.coneInnerAngle:360,coneOuterAngle:void 0!==n.coneOuterAngle?n.coneOuterAngle:360,coneOuterGain:void 0!==n.coneOuterGain?n.coneOuterGain:0,distanceModel:void 0!==n.distanceModel?n.distanceModel:"inverse",maxDistance:void 0!==n.maxDistance?n.maxDistance:1e4,panningModel:void 0!==n.panningModel?n.panningModel:"HRTF",refDistance:void 0!==n.refDistance?n.refDistance:1,rolloffFactor:void 0!==n.rolloffFactor?n.rolloffFactor:1},t._onstereo=n.onstereo?[{fn:n.onstereo}]:[],t._onpos=n.onpos?[{fn:n.onpos}]:[],t._onorientation=n.onorientation?[{fn:n.onorientation}]:[],e.call(this,n) } }(Howl.prototype.init),Howl.prototype.stereo=function(n,t){ var r=this;if(!r._webAudio)return r;if("loaded"!==r._state)return r._queue.push({event:"stereo",action:function(){ r.stereo(n,t) }}),r;var o=void 0===Howler.ctx.createStereoPanner?"spatial":"stereo";if(void 0===t){ if("number"!=typeof n)return r._stereo;r._stereo=n,r._pos=[n,0,0] }for(var i=r._getSoundIds(t),a=0;a<i.length;a++){ var s=r._soundById(i[a]);if(s){ if("number"!=typeof n)return s._stereo;s._stereo=n,s._pos=[n,0,0],s._node&&(s._pannerAttr.panningModel="equalpower",s._panner&&s._panner.pan||e(s,o),"spatial"===o?void 0!==s._panner.positionX?(s._panner.positionX.setValueAtTime(n,Howler.ctx.currentTime),s._panner.positionY.setValueAtTime(0,Howler.ctx.currentTime),s._panner.positionZ.setValueAtTime(0,Howler.ctx.currentTime)):s._panner.setPosition(n,0,0):s._panner.pan.setValueAtTime(n,Howler.ctx.currentTime)),r._emit("stereo",s._id) } }return r },Howl.prototype.pos=function(n,t,r,o){ var i=this;if(!i._webAudio)return i;if("loaded"!==i._state)return i._queue.push({event:"pos",action:function(){ i.pos(n,t,r,o) }}),i;if(t="number"!=typeof t?0:t,r="number"!=typeof r?-.5:r,void 0===o){ if("number"!=typeof n)return i._pos;i._pos=[n,t,r] }for(var a=i._getSoundIds(o),s=0;s<a.length;s++){ var p=i._soundById(a[s]);if(p){ if("number"!=typeof n)return p._pos;p._pos=[n,t,r],p._node&&(p._panner&&!p._panner.pan||e(p,"spatial"),void 0!==p._panner.positionX?(p._panner.positionX.setValueAtTime(n,Howler.ctx.currentTime),p._panner.positionY.setValueAtTime(t,Howler.ctx.currentTime),p._panner.positionZ.setValueAtTime(r,Howler.ctx.currentTime)):p._panner.setPosition(n,t,r)),i._emit("pos",p._id) } }return i },Howl.prototype.orientation=function(n,t,r,o){ var i=this;if(!i._webAudio)return i;if("loaded"!==i._state)return i._queue.push({event:"orientation",action:function(){ i.orientation(n,t,r,o) }}),i;if(t="number"!=typeof t?i._orientation[1]:t,r="number"!=typeof r?i._orientation[2]:r,void 0===o){ if("number"!=typeof n)return i._orientation;i._orientation=[n,t,r] }for(var a=i._getSoundIds(o),s=0;s<a.length;s++){ var p=i._soundById(a[s]);if(p){ if("number"!=typeof n)return p._orientation;p._orientation=[n,t,r],p._node&&(p._panner||(p._pos||(p._pos=i._pos||[0,0,-.5]),e(p,"spatial")),void 0!==p._panner.orientationX?(p._panner.orientationX.setValueAtTime(n,Howler.ctx.currentTime),p._panner.orientationY.setValueAtTime(t,Howler.ctx.currentTime),p._panner.orientationZ.setValueAtTime(r,Howler.ctx.currentTime)):p._panner.setOrientation(n,t,r)),i._emit("orientation",p._id) } }return i },Howl.prototype.pannerAttr=function(){ var n,t,r,o=this,i=arguments;if(!o._webAudio)return o;if(0===i.length)return o._pannerAttr;if(1===i.length){ if("object"!=typeof i[0])return r=o._soundById(parseInt(i[0],10)),r?r._pannerAttr:o._pannerAttr;n=i[0],void 0===t&&(n.pannerAttr||(n.pannerAttr={coneInnerAngle:n.coneInnerAngle,coneOuterAngle:n.coneOuterAngle,coneOuterGain:n.coneOuterGain,distanceModel:n.distanceModel,maxDistance:n.maxDistance,refDistance:n.refDistance,rolloffFactor:n.rolloffFactor,panningModel:n.panningModel}),o._pannerAttr={coneInnerAngle:void 0!==n.pannerAttr.coneInnerAngle?n.pannerAttr.coneInnerAngle:o._coneInnerAngle,coneOuterAngle:void 0!==n.pannerAttr.coneOuterAngle?n.pannerAttr.coneOuterAngle:o._coneOuterAngle,coneOuterGain:void 0!==n.pannerAttr.coneOuterGain?n.pannerAttr.coneOuterGain:o._coneOuterGain,distanceModel:void 0!==n.pannerAttr.distanceModel?n.pannerAttr.distanceModel:o._distanceModel,maxDistance:void 0!==n.pannerAttr.maxDistance?n.pannerAttr.maxDistance:o._maxDistance,refDistance:void 0!==n.pannerAttr.refDistance?n.pannerAttr.refDistance:o._refDistance,rolloffFactor:void 0!==n.pannerAttr.rolloffFactor?n.pannerAttr.rolloffFactor:o._rolloffFactor,panningModel:void 0!==n.pannerAttr.panningModel?n.pannerAttr.panningModel:o._panningModel}) }else 2===i.length&&(n=i[0],t=parseInt(i[1],10));for(var a=o._getSoundIds(t),s=0;s<a.length;s++)if(r=o._soundById(a[s])){ var p=r._pannerAttr;p={coneInnerAngle:void 0!==n.coneInnerAngle?n.coneInnerAngle:p.coneInnerAngle,coneOuterAngle:void 0!==n.coneOuterAngle?n.coneOuterAngle:p.coneOuterAngle,coneOuterGain:void 0!==n.coneOuterGain?n.coneOuterGain:p.coneOuterGain,distanceModel:void 0!==n.distanceModel?n.distanceModel:p.distanceModel,maxDistance:void 0!==n.maxDistance?n.maxDistance:p.maxDistance,refDistance:void 0!==n.refDistance?n.refDistance:p.refDistance,rolloffFactor:void 0!==n.rolloffFactor?n.rolloffFactor:p.rolloffFactor,panningModel:void 0!==n.panningModel?n.panningModel:p.panningModel};var c=r._panner;c?(c.coneInnerAngle=p.coneInnerAngle,c.coneOuterAngle=p.coneOuterAngle,c.coneOuterGain=p.coneOuterGain,c.distanceModel=p.distanceModel,c.maxDistance=p.maxDistance,c.refDistance=p.refDistance,c.rolloffFactor=p.rolloffFactor,c.panningModel=p.panningModel):(r._pos||(r._pos=o._pos||[0,0,-.5]),e(r,"spatial")) }return o },Sound.prototype.init=function(e){ return function(){ var n=this,t=n._parent;n._orientation=t._orientation,n._stereo=t._stereo,n._pos=t._pos,n._pannerAttr=t._pannerAttr,e.call(this),n._stereo?t.stereo(n._stereo):n._pos&&t.pos(n._pos[0],n._pos[1],n._pos[2],n._id) } }(Sound.prototype.init),Sound.prototype.reset=function(e){ return function(){ var n=this,t=n._parent;return n._orientation=t._orientation,n._stereo=t._stereo,n._pos=t._pos,n._pannerAttr=t._pannerAttr,n._stereo?t.stereo(n._stereo):n._pos?t.pos(n._pos[0],n._pos[1],n._pos[2],n._id):n._panner&&(n._panner.disconnect(0),n._panner=void 0,t._refreshBuffer(n)),e.call(this) } }(Sound.prototype.reset);var e=function(e,n){ n=n||"spatial","spatial"===n?(e._panner=Howler.ctx.createPanner(),e._panner.coneInnerAngle=e._pannerAttr.coneInnerAngle,e._panner.coneOuterAngle=e._pannerAttr.coneOuterAngle,e._panner.coneOuterGain=e._pannerAttr.coneOuterGain,e._panner.distanceModel=e._pannerAttr.distanceModel,e._panner.maxDistance=e._pannerAttr.maxDistance,e._panner.refDistance=e._pannerAttr.refDistance,e._panner.rolloffFactor=e._pannerAttr.rolloffFactor,e._panner.panningModel=e._pannerAttr.panningModel,void 0!==e._panner.positionX?(e._panner.positionX.setValueAtTime(e._pos[0],Howler.ctx.currentTime),e._panner.positionY.setValueAtTime(e._pos[1],Howler.ctx.currentTime),e._panner.positionZ.setValueAtTime(e._pos[2],Howler.ctx.currentTime)):e._panner.setPosition(e._pos[0],e._pos[1],e._pos[2]),void 0!==e._panner.orientationX?(e._panner.orientationX.setValueAtTime(e._orientation[0],Howler.ctx.currentTime),e._panner.orientationY.setValueAtTime(e._orientation[1],Howler.ctx.currentTime),e._panner.orientationZ.setValueAtTime(e._orientation[2],Howler.ctx.currentTime)):e._panner.setOrientation(e._orientation[0],e._orientation[1],e._orientation[2])):(e._panner=Howler.ctx.createStereoPanner(),e._panner.pan.setValueAtTime(e._stereo,Howler.ctx.currentTime)),e._panner.connect(e._node),e._paused||e._parent.pause(e._id,!0).play(e._id,!0) } }();
diff --git a/player/js/3rd_party/seedrandom.js b/player/js/3rd_party/seedrandom.js
index 542b33e..30c5b8d 100644
--- a/player/js/3rd_party/seedrandom.js
+++ b/player/js/3rd_party/seedrandom.js
@@ -233,4 +233,4 @@
 })(
     [],     // pool: entropy pool starts empty
     BMMath    // math: package containing random, pow, and seedrandom
-);
\ No newline at end of file
+);
diff --git a/player/js/EffectsManager.js b/player/js/EffectsManager.js
index bec6706..bdf426c 100644
--- a/player/js/EffectsManager.js
+++ b/player/js/EffectsManager.js
@@ -60,4 +60,4 @@
             this.effectElements.push(eff);
         }
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index c94123c..5c16476 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -643,4 +643,4 @@
     if (this.onError) {
         this.onError.call(this, error);
     }
-}
\ No newline at end of file
+}
diff --git a/player/js/effects/EffectsManagerPlaceholder.js b/player/js/effects/EffectsManagerPlaceholder.js
index 73b9c38..01f2de5 100644
--- a/player/js/effects/EffectsManagerPlaceholder.js
+++ b/player/js/effects/EffectsManagerPlaceholder.js
@@ -1,3 +1,3 @@
 function EffectsManager(){
     this.effectElements = [];
-}
\ No newline at end of file
+}
diff --git a/player/js/effects/SliderEffect.js b/player/js/effects/SliderEffect.js
index 94e31e5..183aa94 100644
--- a/player/js/effects/SliderEffect.js
+++ b/player/js/effects/SliderEffect.js
@@ -21,4 +21,4 @@
 }
 function NoValueEffect(){
     this.p = {};
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/BaseElement.js b/player/js/elements/BaseElement.js
index d9a8ea0..4bfecdf 100644
--- a/player/js/elements/BaseElement.js
+++ b/player/js/elements/BaseElement.js
@@ -57,4 +57,4 @@
         return this.type;
     }
     ,sourceRectAtTime: function(){}
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/ImageElement.js b/player/js/elements/ImageElement.js
index f77dda1..50f0d69 100644
--- a/player/js/elements/ImageElement.js
+++ b/player/js/elements/ImageElement.js
@@ -21,4 +21,4 @@
 
 IImageElement.prototype.sourceRectAtTime = function() {
 	return this.sourceRect;
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/ShapeElement.js b/player/js/elements/ShapeElement.js
index 4c2148e..35b02b3 100644
--- a/player/js/elements/ShapeElement.js
+++ b/player/js/elements/ShapeElement.js
@@ -68,4 +68,4 @@
         this.prepareRenderableFrame(num);
         this.prepareProperties(num, this.isInRange);
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/SolidElement.js b/player/js/elements/SolidElement.js
index 05ff414..b4b7790 100644
--- a/player/js/elements/SolidElement.js
+++ b/player/js/elements/SolidElement.js
@@ -13,4 +13,4 @@
     rect.setAttribute('height',this.data.sh);
     rect.setAttribute('fill',this.data.sc);
     this.layerElement.appendChild(rect);
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/TextElement.js b/player/js/elements/TextElement.js
index c4432ed..ee5562a 100644
--- a/player/js/elements/TextElement.js
+++ b/player/js/elements/TextElement.js
@@ -77,4 +77,4 @@
 
 ITextElement.prototype.destroy = function(){
     
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/canvasElements/CVCompElement.js b/player/js/elements/canvasElements/CVCompElement.js
index 704f6d6..9e5d1f8 100644
--- a/player/js/elements/canvasElements/CVCompElement.js
+++ b/player/js/elements/canvasElements/CVCompElement.js
@@ -35,4 +35,4 @@
     }
     this.layers = null;
     this.elements = null;
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/canvasElements/CVContextData.js b/player/js/elements/canvasElements/CVContextData.js
index b522199..21df82a 100644
--- a/player/js/elements/canvasElements/CVContextData.js
+++ b/player/js/elements/canvasElements/CVContextData.js
@@ -27,4 +27,4 @@
 	this.cArrPos = 0;
 	this.cTr.reset();
     this.cO = 1;
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/canvasElements/CVEffects.js b/player/js/elements/canvasElements/CVEffects.js
index c141cd2..a7641d0 100644
--- a/player/js/elements/canvasElements/CVEffects.js
+++ b/player/js/elements/canvasElements/CVEffects.js
@@ -1,4 +1,4 @@
 function CVEffects() {
 
 }
-CVEffects.prototype.renderFrame = function(){};
\ No newline at end of file
+CVEffects.prototype.renderFrame = function(){};
diff --git a/player/js/elements/canvasElements/CVImageElement.js b/player/js/elements/canvasElements/CVImageElement.js
index 7551ffc..e930338 100644
--- a/player/js/elements/canvasElements/CVImageElement.js
+++ b/player/js/elements/canvasElements/CVImageElement.js
@@ -41,4 +41,4 @@
 
 CVImageElement.prototype.destroy = function(){
     this.img = null;
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/canvasElements/CVMaskElement.js b/player/js/elements/canvasElements/CVMaskElement.js
index c852ebd..4d669fc 100644
--- a/player/js/elements/canvasElements/CVMaskElement.js
+++ b/player/js/elements/canvasElements/CVMaskElement.js
@@ -55,4 +55,4 @@
 
 CVMaskElement.prototype.destroy = function(){
     this.element = null;
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/canvasElements/CVSolidElement.js b/player/js/elements/canvasElements/CVSolidElement.js
index 0f88d44..3ccc456 100644
--- a/player/js/elements/canvasElements/CVSolidElement.js
+++ b/player/js/elements/canvasElements/CVSolidElement.js
@@ -11,4 +11,4 @@
     ctx.fillStyle = this.data.sc;
     ctx.fillRect(0, 0, this.data.sw, this.data.sh);
     //
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/canvasElements/CVTextElement.js b/player/js/elements/canvasElements/CVTextElement.js
index c4cfc2a..2fb29e7 100644
--- a/player/js/elements/canvasElements/CVTextElement.js
+++ b/player/js/elements/canvasElements/CVTextElement.js
@@ -188,4 +188,4 @@
             this.globalData.renderer.restore();
         }
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/helpers/FrameElement.js b/player/js/elements/helpers/FrameElement.js
index 41080a0..b26d1a4 100644
--- a/player/js/elements/helpers/FrameElement.js
+++ b/player/js/elements/helpers/FrameElement.js
@@ -48,4 +48,4 @@
             this.dynamicProperties.push(prop);
         }
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/helpers/HierarchyElement.js b/player/js/elements/helpers/HierarchyElement.js
index dbc8edb..33fdf52 100644
--- a/player/js/elements/helpers/HierarchyElement.js
+++ b/player/js/elements/helpers/HierarchyElement.js
@@ -47,4 +47,4 @@
             this.comp.buildElementParenting(this, this.data.parent, []);
         }
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/helpers/RenderableDOMElement.js b/player/js/elements/helpers/RenderableDOMElement.js
index f2a955f..1a7b595 100644
--- a/player/js/elements/helpers/RenderableDOMElement.js
+++ b/player/js/elements/helpers/RenderableDOMElement.js
@@ -58,4 +58,4 @@
         }
     };
     extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);
-}());
\ No newline at end of file
+}());
diff --git a/player/js/elements/helpers/RenderableElement.js b/player/js/elements/helpers/RenderableElement.js
index 6018d81..694c2a5 100644
--- a/player/js/elements/helpers/RenderableElement.js
+++ b/player/js/elements/helpers/RenderableElement.js
@@ -85,4 +85,4 @@
             return {w:this.data.width,h:this.data.height};
         }
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/helpers/TransformElement.js b/player/js/elements/helpers/TransformElement.js
index 4a54327..28f5259 100644
--- a/player/js/elements/helpers/TransformElement.js
+++ b/player/js/elements/helpers/TransformElement.js
@@ -71,4 +71,4 @@
         return pt;
     },
     mHelper: new Matrix()
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/helpers/shapes/CVShapeData.js b/player/js/elements/helpers/shapes/CVShapeData.js
index 3a545a5..1f147b7 100644
--- a/player/js/elements/helpers/shapes/CVShapeData.js
+++ b/player/js/elements/helpers/shapes/CVShapeData.js
@@ -23,4 +23,4 @@
     }
 }
 
-CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;
\ No newline at end of file
+CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;
diff --git a/player/js/elements/helpers/shapes/ProcessedElement.js b/player/js/elements/helpers/shapes/ProcessedElement.js
index 6bd71d4..2d07fc2 100644
--- a/player/js/elements/helpers/shapes/ProcessedElement.js
+++ b/player/js/elements/helpers/shapes/ProcessedElement.js
@@ -1,4 +1,4 @@
 function ProcessedElement(element, position) {
 	this.elem = element;
 	this.pos = position;
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/helpers/shapes/SVGElementsRenderer.js b/player/js/elements/helpers/shapes/SVGElementsRenderer.js
index 42ce0ee..211942b 100644
--- a/player/js/elements/helpers/shapes/SVGElementsRenderer.js
+++ b/player/js/elements/helpers/shapes/SVGElementsRenderer.js
@@ -206,4 +206,4 @@
     };
 
     return ob;
-}())
\ No newline at end of file
+}())
diff --git a/player/js/elements/helpers/shapes/SVGFillStyleData.js b/player/js/elements/helpers/shapes/SVGFillStyleData.js
index 3ec2644..840e7a5 100644
--- a/player/js/elements/helpers/shapes/SVGFillStyleData.js
+++ b/player/js/elements/helpers/shapes/SVGFillStyleData.js
@@ -6,4 +6,4 @@
 	this.style = styleOb;
 }
 
-extendPrototype([DynamicPropertyContainer], SVGFillStyleData);
\ No newline at end of file
+extendPrototype([DynamicPropertyContainer], SVGFillStyleData);
diff --git a/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js b/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js
index b7a9d9c..881fe69 100644
--- a/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js
+++ b/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js
@@ -70,4 +70,4 @@
     }
 };
 
-extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);
\ No newline at end of file
+extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);
diff --git a/player/js/elements/helpers/shapes/SVGGradientStrokeStyleData.js b/player/js/elements/helpers/shapes/SVGGradientStrokeStyleData.js
index 9cf09a0..ed554af 100644
--- a/player/js/elements/helpers/shapes/SVGGradientStrokeStyleData.js
+++ b/player/js/elements/helpers/shapes/SVGGradientStrokeStyleData.js
@@ -7,4 +7,4 @@
     this._isAnimated = !!this._isAnimated;
 }
 
-extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);
\ No newline at end of file
+extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);
diff --git a/player/js/elements/helpers/shapes/SVGShapeData.js b/player/js/elements/helpers/shapes/SVGShapeData.js
index e647bb3..6bd0df8 100644
--- a/player/js/elements/helpers/shapes/SVGShapeData.js
+++ b/player/js/elements/helpers/shapes/SVGShapeData.js
@@ -22,4 +22,4 @@
 
 SVGShapeData.prototype.setAsAnimated = function() {
     this._isAnimated = true;
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/helpers/shapes/SVGStrokeStyleData.js b/player/js/elements/helpers/shapes/SVGStrokeStyleData.js
index 3548095..a8df4bf 100644
--- a/player/js/elements/helpers/shapes/SVGStrokeStyleData.js
+++ b/player/js/elements/helpers/shapes/SVGStrokeStyleData.js
@@ -9,4 +9,4 @@
     this._isAnimated = !!this._isAnimated;
 }
 
-extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);
\ No newline at end of file
+extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);
diff --git a/player/js/elements/helpers/shapes/SVGStyleData.js b/player/js/elements/helpers/shapes/SVGStyleData.js
index e69a647..d0c695e 100644
--- a/player/js/elements/helpers/shapes/SVGStyleData.js
+++ b/player/js/elements/helpers/shapes/SVGStyleData.js
@@ -12,4 +12,4 @@
 SVGStyleData.prototype.reset = function() {
 	this.d = '';
 	this._mdf = false;
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/helpers/shapes/SVGTransformData.js b/player/js/elements/helpers/shapes/SVGTransformData.js
index f20d382..5dd6fbd 100644
--- a/player/js/elements/helpers/shapes/SVGTransformData.js
+++ b/player/js/elements/helpers/shapes/SVGTransformData.js
@@ -6,4 +6,4 @@
 	};
 	this.elements = [];
     this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/helpers/shapes/ShapeElement.js b/player/js/elements/helpers/shapes/ShapeElement.js
index 2c8f5a5..7b48c15 100644
--- a/player/js/elements/helpers/shapes/ShapeElement.js
+++ b/player/js/elements/helpers/shapes/ShapeElement.js
@@ -1,3 +1,3 @@
 function ShapeElementData() {
 	
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/helpers/shapes/ShapeGroupData.js b/player/js/elements/helpers/shapes/ShapeGroupData.js
index 28735af..e4733d5 100644
--- a/player/js/elements/helpers/shapes/ShapeGroupData.js
+++ b/player/js/elements/helpers/shapes/ShapeGroupData.js
@@ -2,4 +2,4 @@
 	this.it = [];
     this.prevViewData = [];
     this.gr = createNS('g');
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/helpers/shapes/ShapeTransformManager.js b/player/js/elements/helpers/shapes/ShapeTransformManager.js
index 4f8cae6..b44fadb 100644
--- a/player/js/elements/helpers/shapes/ShapeTransformManager.js
+++ b/player/js/elements/helpers/shapes/ShapeTransformManager.js
@@ -53,4 +53,4 @@
     getNewKey: function() {
         return '_' + this.transform_key_count++;
     }
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/htmlElements/HBaseElement.js b/player/js/elements/htmlElements/HBaseElement.js
index 1890474..9d7ba9c 100644
--- a/player/js/elements/htmlElements/HBaseElement.js
+++ b/player/js/elements/htmlElements/HBaseElement.js
@@ -70,4 +70,4 @@
 };
 HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;
 HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;
-HBaseElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;
\ No newline at end of file
+HBaseElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;
diff --git a/player/js/elements/htmlElements/HCameraElement.js b/player/js/elements/htmlElements/HCameraElement.js
index cd845d5..3fcd129 100644
--- a/player/js/elements/htmlElements/HCameraElement.js
+++ b/player/js/elements/htmlElements/HCameraElement.js
@@ -136,4 +136,4 @@
 
 HCameraElement.prototype.destroy = function(){
 };
-HCameraElement.prototype.getBaseElement = function(){ return null; };
\ No newline at end of file
+HCameraElement.prototype.getBaseElement = function(){ return null; };
diff --git a/player/js/elements/htmlElements/HEffects.js b/player/js/elements/htmlElements/HEffects.js
index 5445e6a..fcc9558 100644
--- a/player/js/elements/htmlElements/HEffects.js
+++ b/player/js/elements/htmlElements/HEffects.js
@@ -1,3 +1,3 @@
 function HEffects() {
 }
-HEffects.prototype.renderFrame = function(){};
\ No newline at end of file
+HEffects.prototype.renderFrame = function(){};
diff --git a/player/js/elements/htmlElements/HImageElement.js b/player/js/elements/htmlElements/HImageElement.js
index 0652407..2a17340 100644
--- a/player/js/elements/htmlElements/HImageElement.js
+++ b/player/js/elements/htmlElements/HImageElement.js
@@ -26,4 +26,4 @@
     if(this.data.ln){
         this.baseElement.setAttribute('id',this.data.ln);
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/htmlElements/HShapeElement.js b/player/js/elements/htmlElements/HShapeElement.js
index 66f16ef..b204600 100644
--- a/player/js/elements/htmlElements/HShapeElement.js
+++ b/player/js/elements/htmlElements/HShapeElement.js
@@ -216,4 +216,4 @@
         }
     }
 
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/htmlElements/HTextElement.js b/player/js/elements/htmlElements/HTextElement.js
index ec60168..00bb5e0 100644
--- a/player/js/elements/htmlElements/HTextElement.js
+++ b/player/js/elements/htmlElements/HTextElement.js
@@ -246,4 +246,4 @@
             this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';
         }
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/SVGBaseElement.js b/player/js/elements/svgElements/SVGBaseElement.js
index b353aed..2341225 100644
--- a/player/js/elements/svgElements/SVGBaseElement.js
+++ b/player/js/elements/svgElements/SVGBaseElement.js
@@ -154,4 +154,4 @@
         }
         this.matteElement.setAttribute("mask", "url(" + locationHref + "#" + id + ")");
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/SVGCompElement.js b/player/js/elements/svgElements/SVGCompElement.js
index e264f84..30b9d79 100644
--- a/player/js/elements/svgElements/SVGCompElement.js
+++ b/player/js/elements/svgElements/SVGCompElement.js
@@ -9,4 +9,4 @@
     this.tm = data.tm ? PropertyFactory.getProp(this,data.tm,0,globalData.frameRate,this) : {_placeholder:true};
 }
 
-extendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);
\ No newline at end of file
+extendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);
diff --git a/player/js/elements/svgElements/SVGEffects.js b/player/js/elements/svgElements/SVGEffects.js
index b57ed06..1255571 100644
--- a/player/js/elements/svgElements/SVGEffects.js
+++ b/player/js/elements/svgElements/SVGEffects.js
@@ -49,4 +49,4 @@
     for(i=0;i<len;i+=1){
         this.filters[i].renderFrame(_isFirstFrame);
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/SVGEffectsPlaceholder.js b/player/js/elements/svgElements/SVGEffectsPlaceholder.js
index 29f89f0..73df9b9 100644
--- a/player/js/elements/svgElements/SVGEffectsPlaceholder.js
+++ b/player/js/elements/svgElements/SVGEffectsPlaceholder.js
@@ -1 +1 @@
-function SVGEffects(){}
\ No newline at end of file
+function SVGEffects(){}
diff --git a/player/js/elements/svgElements/effects/SVGDropShadowEffect.js b/player/js/elements/svgElements/effects/SVGDropShadowEffect.js
index a57ae7b..4dd1a8f 100644
--- a/player/js/elements/svgElements/effects/SVGDropShadowEffect.js
+++ b/player/js/elements/svgElements/effects/SVGDropShadowEffect.js
@@ -78,4 +78,4 @@
             }
         }*/
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/effects/SVGFillFilter.js b/player/js/elements/svgElements/effects/SVGFillFilter.js
index db1069d..6499047 100644
--- a/player/js/elements/svgElements/effects/SVGFillFilter.js
+++ b/player/js/elements/svgElements/effects/SVGFillFilter.js
@@ -13,4 +13,4 @@
         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');
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/effects/SVGGaussianBlurEffect.js b/player/js/elements/svgElements/effects/SVGGaussianBlurEffect.js
index 4b28f79..411f67e 100644
--- a/player/js/elements/svgElements/effects/SVGGaussianBlurEffect.js
+++ b/player/js/elements/svgElements/effects/SVGGaussianBlurEffect.js
@@ -36,4 +36,4 @@
         var edgeMode = (this.filterManager.effectElements[2].p.v == 1) ? 'wrap' : 'duplicate';
         this.feGaussianBlur.setAttribute('edgeMode', edgeMode);
     }
-}
\ No newline at end of file
+}
diff --git a/player/js/elements/svgElements/effects/SVGMatte3Effect.js b/player/js/elements/svgElements/effects/SVGMatte3Effect.js
index 47e0a19..ddebae4 100644
--- a/player/js/elements/svgElements/effects/SVGMatte3Effect.js
+++ b/player/js/elements/svgElements/effects/SVGMatte3Effect.js
@@ -88,4 +88,4 @@
     if(!this.initialized) {
         this.initialize();
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/effects/SVGProLevelsFilter.js b/player/js/elements/svgElements/effects/SVGProLevelsFilter.js
index 1f1c0a6..bf006eb 100644
--- a/player/js/elements/svgElements/effects/SVGProLevelsFilter.js
+++ b/player/js/elements/svgElements/effects/SVGProLevelsFilter.js
@@ -99,4 +99,4 @@
         }
         
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/effects/SVGStrokeEffect.js b/player/js/elements/svgElements/effects/SVGStrokeEffect.js
index d8f6bbf..8d20ba6 100644
--- a/player/js/elements/svgElements/effects/SVGStrokeEffect.js
+++ b/player/js/elements/svgElements/effects/SVGStrokeEffect.js
@@ -104,4 +104,4 @@
             this.pathMasker.setAttribute('stroke','rgb('+bm_floor(color[0]*255)+','+bm_floor(color[1]*255)+','+bm_floor(color[2]*255)+')');
         }
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/effects/SVGTintEffect.js b/player/js/elements/svgElements/effects/SVGTintEffect.js
index 9b41b08..cb7548a 100644
--- a/player/js/elements/svgElements/effects/SVGTintEffect.js
+++ b/player/js/elements/svgElements/effects/SVGTintEffect.js
@@ -33,4 +33,4 @@
         var opacity = this.filterManager.effectElements[2].p.v/100;
         this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/elements/svgElements/effects/SVGTritoneFilter.js b/player/js/elements/svgElements/effects/SVGTritoneFilter.js
index 0b880c4..877e93d 100644
--- a/player/js/elements/svgElements/effects/SVGTritoneFilter.js
+++ b/player/js/elements/svgElements/effects/SVGTritoneFilter.js
@@ -38,4 +38,4 @@
         //var opacity = this.filterManager.effectElements[2].p.v/100;
         //this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/players/BasicPlayer.js b/player/js/players/BasicPlayer.js
index 7467fc1..0dadd5d 100644
--- a/player/js/players/BasicPlayer.js
+++ b/player/js/players/BasicPlayer.js
@@ -131,4 +131,4 @@
     if(perc !== undefined){
         self.animationItem.updateAnimation(perc);
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/players/PlayerManager.js b/player/js/players/PlayerManager.js
index f038776..729c757 100644
--- a/player/js/players/PlayerManager.js
+++ b/player/js/players/PlayerManager.js
@@ -7,4 +7,4 @@
     }
 };
 
-var playerManager = createElement(PlayerManager);
\ No newline at end of file
+var playerManager = createElement(PlayerManager);
diff --git a/player/js/renderers/BaseRenderer.js b/player/js/renderers/BaseRenderer.js
index 7b8d5df..0ccffff 100644
--- a/player/js/renderers/BaseRenderer.js
+++ b/player/js/renderers/BaseRenderer.js
@@ -131,4 +131,4 @@
         w: animData.w,
         h: animData.h
     }
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/BaseEvent.js b/player/js/utils/BaseEvent.js
index a3a00d9..43dad11 100644
--- a/player/js/utils/BaseEvent.js
+++ b/player/js/utils/BaseEvent.js
@@ -36,4 +36,4 @@
             }
         }
     }
-};
\ No newline at end of file
+};
diff --git a/player/js/utils/PropertyFactory.js b/player/js/utils/PropertyFactory.js
index 5cbae79..84a6a4c 100644
--- a/player/js/utils/PropertyFactory.js
+++ b/player/js/utils/PropertyFactory.js
@@ -439,4 +439,4 @@
         getProp: getProp
     };
     return ob;
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/TransformProperty.js b/player/js/utils/TransformProperty.js
index fcbf377..d777019 100644
--- a/player/js/utils/TransformProperty.js
+++ b/player/js/utils/TransformProperty.js
@@ -224,4 +224,4 @@
         getTransformProperty: getTransformProperty
     };
 
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/audio/AudioController.js b/player/js/utils/audio/AudioController.js
index 0349517..89cec73 100644
--- a/player/js/utils/audio/AudioController.js
+++ b/player/js/utils/audio/AudioController.js
@@ -77,4 +77,4 @@
 		return new AudioController()
 	}
 
-}())
\ No newline at end of file
+}())
diff --git a/player/js/utils/audio/AudioElement.js b/player/js/utils/audio/AudioElement.js
index 167b987..ab28f85 100644
--- a/player/js/utils/audio/AudioElement.js
+++ b/player/js/utils/audio/AudioElement.js
@@ -1,3 +1,3 @@
 function AudioElement(data) {
 	this.audioData = data
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/bez.js b/player/js/utils/bez.js
index 3bb4711..877ef27 100644
--- a/player/js/utils/bez.js
+++ b/player/js/utils/bez.js
@@ -229,4 +229,4 @@
     };
 }
 
-var bez = bezFunction();
\ No newline at end of file
+var bez = bezFunction();
diff --git a/player/js/utils/common.js b/player/js/utils/common.js
index 818d9f4..72f8387 100644
--- a/player/js/utils/common.js
+++ b/player/js/utils/common.js
@@ -214,4 +214,4 @@
         }
         return '#' + colorMap[r] + colorMap[g] + colorMap[b];
     };
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/CompInterface.js b/player/js/utils/expressions/CompInterface.js
index 99121e0..fb3124f 100644
--- a/player/js/utils/expressions/CompInterface.js
+++ b/player/js/utils/expressions/CompInterface.js
@@ -22,4 +22,4 @@
         _thisLayerFunction.numLayers = comp.layers.length;
         return _thisLayerFunction;
     };
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/EffectInterface.js b/player/js/utils/expressions/EffectInterface.js
index 38702df..cce951a 100644
--- a/player/js/utils/expressions/EffectInterface.js
+++ b/player/js/utils/expressions/EffectInterface.js
@@ -98,4 +98,4 @@
 
     return ob;
 
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js
index d77d95a..e9e8223 100644
--- a/player/js/utils/expressions/ExpressionManager.js
+++ b/player/js/utils/expressions/ExpressionManager.js
@@ -662,4 +662,4 @@
 
     ob.initiateExpression = initiateExpression;
     return ob;
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/ExpressionPropertyDecorator.js b/player/js/utils/expressions/ExpressionPropertyDecorator.js
index ff63c91..bbc3b1b 100644
--- a/player/js/utils/expressions/ExpressionPropertyDecorator.js
+++ b/player/js/utils/expressions/ExpressionPropertyDecorator.js
@@ -436,4 +436,4 @@
         }
         return prop;
     };
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/ExpressionTextPropertyDecorator.js b/player/js/utils/expressions/ExpressionTextPropertyDecorator.js
index ee64ec7..3ee96f6 100644
--- a/player/js/utils/expressions/ExpressionTextPropertyDecorator.js
+++ b/player/js/utils/expressions/ExpressionTextPropertyDecorator.js
@@ -30,4 +30,4 @@
 
     TextProperty.prototype.searchExpressions = searchExpressions;
     
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/ExpressionValue.js b/player/js/utils/expressions/ExpressionValue.js
index 87feedd..c01a9e7 100644
--- a/player/js/utils/expressions/ExpressionValue.js
+++ b/player/js/utils/expressions/ExpressionValue.js
@@ -48,4 +48,4 @@
         }
     });
     return expressionValue;
-};
\ No newline at end of file
+};
diff --git a/player/js/utils/expressions/ProjectInterface.js b/player/js/utils/expressions/ProjectInterface.js
index 36ea24c..8b00f0a 100644
--- a/player/js/utils/expressions/ProjectInterface.js
+++ b/player/js/utils/expressions/ProjectInterface.js
@@ -27,4 +27,4 @@
 
         return _thisProjectFunction;
     };
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/PropertyGroupFactory.js b/player/js/utils/expressions/PropertyGroupFactory.js
index 3eae845..c6e37d6 100644
--- a/player/js/utils/expressions/PropertyGroupFactory.js
+++ b/player/js/utils/expressions/PropertyGroupFactory.js
@@ -9,4 +9,4 @@
             }
         }
     }
-}())
\ No newline at end of file
+}())
diff --git a/player/js/utils/expressions/PropertyInterface.js b/player/js/utils/expressions/PropertyInterface.js
index 54eba82..91a0830 100644
--- a/player/js/utils/expressions/PropertyInterface.js
+++ b/player/js/utils/expressions/PropertyInterface.js
@@ -16,4 +16,4 @@
 
         return _propertyGroup;
     }
-}())
\ No newline at end of file
+}())
diff --git a/player/js/utils/expressions/TextInterface.js b/player/js/utils/expressions/TextInterface.js
index da72c0f..9c34b79 100644
--- a/player/js/utils/expressions/TextInterface.js
+++ b/player/js/utils/expressions/TextInterface.js
@@ -22,4 +22,4 @@
         });
         return _thisLayerFunction;
     };
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/TextSelectorPropertyDecorator.js b/player/js/utils/expressions/TextSelectorPropertyDecorator.js
index 9b6d89b..8c941c0 100644
--- a/player/js/utils/expressions/TextSelectorPropertyDecorator.js
+++ b/player/js/utils/expressions/TextSelectorPropertyDecorator.js
@@ -40,4 +40,4 @@
             return propertyGetTextProp(elem,data,arr);
         }
     };
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/TransformInterface.js b/player/js/utils/expressions/TransformInterface.js
index a06111f..3d30689 100644
--- a/player/js/utils/expressions/TransformInterface.js
+++ b/player/js/utils/expressions/TransformInterface.js
@@ -116,4 +116,4 @@
 
         return _thisFunction;
     };
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/expressionHelpers.js b/player/js/utils/expressions/expressionHelpers.js
index 4c3ffc2..69c49ed 100644
--- a/player/js/utils/expressions/expressionHelpers.js
+++ b/player/js/utils/expressions/expressionHelpers.js
@@ -78,4 +78,4 @@
 		getStaticValueAtTime: getStaticValueAtTime,
 		setGroupProperty: setGroupProperty,
 	}
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/expressions/shapes/ShapePathInterface.js b/player/js/utils/expressions/shapes/ShapePathInterface.js
index 004ef11..c5e7f0e 100644
--- a/player/js/utils/expressions/shapes/ShapePathInterface.js
+++ b/player/js/utils/expressions/shapes/ShapePathInterface.js
@@ -39,4 +39,4 @@
             return interfaceFunction;
         }
     }()
-)
\ No newline at end of file
+)
diff --git a/player/js/utils/featureSupport.js b/player/js/utils/featureSupport.js
index 1383260..1da6c9a 100644
--- a/player/js/utils/featureSupport.js
+++ b/player/js/utils/featureSupport.js
@@ -6,4 +6,4 @@
        ob.maskType = false;
     }
     return ob;
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/filters.js b/player/js/utils/filters.js
index dfff6ef..1398961 100644
--- a/player/js/utils/filters.js
+++ b/player/js/utils/filters.js
@@ -23,4 +23,4 @@
     }
 
     return ob;
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/functionExtensions.js b/player/js/utils/functionExtensions.js
index df82c41..e090ec7 100644
--- a/player/js/utils/functionExtensions.js
+++ b/player/js/utils/functionExtensions.js
@@ -16,4 +16,4 @@
 	function ProxyFunction(){}
 	ProxyFunction.prototype = prototype;
 	return ProxyFunction;
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/helpers/arrays.js b/player/js/utils/helpers/arrays.js
index 2532a93..de07cc9 100644
--- a/player/js/utils/helpers/arrays.js
+++ b/player/js/utils/helpers/arrays.js
@@ -33,4 +33,4 @@
 
 function createSizedArray(len) {
 	return Array.apply(null,{length:len});
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/helpers/blendModes.js b/player/js/utils/helpers/blendModes.js
index fef305e..d6403e2 100644
--- a/player/js/utils/helpers/blendModes.js
+++ b/player/js/utils/helpers/blendModes.js
@@ -22,4 +22,4 @@
 	return function(mode) {
 		return blendModeEnums[mode] || '';
 	}
-}())
\ No newline at end of file
+}())
diff --git a/player/js/utils/helpers/dynamicProperties.js b/player/js/utils/helpers/dynamicProperties.js
index 9fc9449..298595e 100644
--- a/player/js/utils/helpers/dynamicProperties.js
+++ b/player/js/utils/helpers/dynamicProperties.js
@@ -23,4 +23,4 @@
         this._mdf = false;
         this._isAnimated = false;
     }
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/helpers/html_elements.js b/player/js/utils/helpers/html_elements.js
index f97952e..68f7ab6 100644
--- a/player/js/utils/helpers/html_elements.js
+++ b/player/js/utils/helpers/html_elements.js
@@ -1,4 +1,4 @@
 function createTag(type) {
 	//return {appendChild:function(){},setAttribute:function(){},style:{}}
 	return document.createElement(type);
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/helpers/svg_elements.js b/player/js/utils/helpers/svg_elements.js
index 2cf5066..a22c046 100644
--- a/player/js/utils/helpers/svg_elements.js
+++ b/player/js/utils/helpers/svg_elements.js
@@ -1,4 +1,4 @@
 function createNS(type) {
 	//return {appendChild:function(){},setAttribute:function(){},style:{}}
 	return document.createElementNS(svgNS, type);
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/imagePreloader.js b/player/js/utils/imagePreloader.js
index 1dc2790..cb68a69 100644
--- a/player/js/utils/imagePreloader.js
+++ b/player/js/utils/imagePreloader.js
@@ -159,4 +159,4 @@
     }
 
     return ImagePreloader;
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/pooling/bezier_length_pool.js b/player/js/utils/pooling/bezier_length_pool.js
index f0840d3..9c8ae40 100644
--- a/player/js/utils/pooling/bezier_length_pool.js
+++ b/player/js/utils/pooling/bezier_length_pool.js
@@ -8,4 +8,4 @@
         };
 	}
 	return pool_factory(8, create);
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/pooling/point_pool.js b/player/js/utils/pooling/point_pool.js
index 9730531..74e24e5 100644
--- a/player/js/utils/pooling/point_pool.js
+++ b/player/js/utils/pooling/point_pool.js
@@ -4,4 +4,4 @@
 		return createTypedArray('float32', 2);
 	}
 	return pool_factory(8, create);
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/pooling/pooling.js b/player/js/utils/pooling/pooling.js
index a42bb21..2ea1a3f 100644
--- a/player/js/utils/pooling/pooling.js
+++ b/player/js/utils/pooling/pooling.js
@@ -7,4 +7,4 @@
 	return {
 		double: double
 	};
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/pooling/segments_length_pool.js b/player/js/utils/pooling/segments_length_pool.js
index 8aa062a..c9324d8 100644
--- a/player/js/utils/pooling/segments_length_pool.js
+++ b/player/js/utils/pooling/segments_length_pool.js
@@ -16,4 +16,4 @@
 	}
 
 	return pool_factory(8, create, release);
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/pooling/shapeCollection_pool.js b/player/js/utils/pooling/shapeCollection_pool.js
index 00094c0..3ef6ab7 100644
--- a/player/js/utils/pooling/shapeCollection_pool.js
+++ b/player/js/utils/pooling/shapeCollection_pool.js
@@ -35,4 +35,4 @@
 	}
 
 	return ob;
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/pooling/shape_pool.js b/player/js/utils/pooling/shape_pool.js
index ea18906..5a1361f 100644
--- a/player/js/utils/pooling/shape_pool.js
+++ b/player/js/utils/pooling/shape_pool.js
@@ -35,4 +35,4 @@
 	factory.clone = clone;
 
 	return factory;
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/shapes/DashProperty.js b/player/js/utils/shapes/DashProperty.js
index 9fac12c..f3122a7 100644
--- a/player/js/utils/shapes/DashProperty.js
+++ b/player/js/utils/shapes/DashProperty.js
@@ -45,4 +45,4 @@
         }
     }
 };
-extendPrototype([DynamicPropertyContainer], DashProperty);
\ No newline at end of file
+extendPrototype([DynamicPropertyContainer], DashProperty);
diff --git a/player/js/utils/shapes/GradientProperty.js b/player/js/utils/shapes/GradientProperty.js
index d65f568..84e0e22 100644
--- a/player/js/utils/shapes/GradientProperty.js
+++ b/player/js/utils/shapes/GradientProperty.js
@@ -74,4 +74,4 @@
     }
 };
 
-extendPrototype([DynamicPropertyContainer], GradientProperty);
\ No newline at end of file
+extendPrototype([DynamicPropertyContainer], GradientProperty);
diff --git a/player/js/utils/shapes/MouseModifier.js b/player/js/utils/shapes/MouseModifier.js
index afd2d25..77fa3da 100644
--- a/player/js/utils/shapes/MouseModifier.js
+++ b/player/js/utils/shapes/MouseModifier.js
@@ -225,4 +225,4 @@
 
 
 
-ShapeModifiers.registerModifier('ms',MouseModifier);
\ No newline at end of file
+ShapeModifiers.registerModifier('ms',MouseModifier);
diff --git a/player/js/utils/shapes/PuckerAndBloatModifier.js b/player/js/utils/shapes/PuckerAndBloatModifier.js
index c3699a0..80cd417 100644
--- a/player/js/utils/shapes/PuckerAndBloatModifier.js
+++ b/player/js/utils/shapes/PuckerAndBloatModifier.js
@@ -59,4 +59,4 @@
         this._mdf = false;
     }
 };
-ShapeModifiers.registerModifier('pb',PuckerAndBloatModifier);
\ No newline at end of file
+ShapeModifiers.registerModifier('pb',PuckerAndBloatModifier);
diff --git a/player/js/utils/shapes/RepeaterModifier.js b/player/js/utils/shapes/RepeaterModifier.js
index b5eacda..30dc84c 100644
--- a/player/js/utils/shapes/RepeaterModifier.js
+++ b/player/js/utils/shapes/RepeaterModifier.js
@@ -199,4 +199,4 @@
 
 RepeaterModifier.prototype.addShape = function(){};
 
-ShapeModifiers.registerModifier('rp',RepeaterModifier);
\ No newline at end of file
+ShapeModifiers.registerModifier('rp',RepeaterModifier);
diff --git a/player/js/utils/shapes/RoundCornersModifier.js b/player/js/utils/shapes/RoundCornersModifier.js
index 2ad3678..f4fe725 100644
--- a/player/js/utils/shapes/RoundCornersModifier.js
+++ b/player/js/utils/shapes/RoundCornersModifier.js
@@ -90,4 +90,4 @@
     }
 };
 
-ShapeModifiers.registerModifier('rd',RoundCornersModifier);
\ No newline at end of file
+ShapeModifiers.registerModifier('rd',RoundCornersModifier);
diff --git a/player/js/utils/shapes/ShapeCollection.js b/player/js/utils/shapes/ShapeCollection.js
index a7f4f20..d8e61f4 100644
--- a/player/js/utils/shapes/ShapeCollection.js
+++ b/player/js/utils/shapes/ShapeCollection.js
@@ -19,4 +19,4 @@
 		shape_pool.release(this.shapes[i]);
 	}
 	this._length = 0;
-};
\ No newline at end of file
+};
diff --git a/player/js/utils/shapes/ShapeModifiers.js b/player/js/utils/shapes/ShapeModifiers.js
index 585f1a8..6e78807 100644
--- a/player/js/utils/shapes/ShapeModifiers.js
+++ b/player/js/utils/shapes/ShapeModifiers.js
@@ -54,4 +54,4 @@
     this.iterateDynamicProperties();
 };
 
-extendPrototype([DynamicPropertyContainer], ShapeModifier);
\ No newline at end of file
+extendPrototype([DynamicPropertyContainer], ShapeModifier);
diff --git a/player/js/utils/shapes/ShapePath.js b/player/js/utils/shapes/ShapePath.js
index f23bae0..90b13ee 100644
--- a/player/js/utils/shapes/ShapePath.js
+++ b/player/js/utils/shapes/ShapePath.js
@@ -81,4 +81,4 @@
         cnt -= 1;
     }
     return newPath;
-};
\ No newline at end of file
+};
diff --git a/player/js/utils/shapes/ShapeProperty.js b/player/js/utils/shapes/ShapeProperty.js
index cf8ee72..508d0a6 100644
--- a/player/js/utils/shapes/ShapeProperty.js
+++ b/player/js/utils/shapes/ShapeProperty.js
@@ -506,4 +506,4 @@
     ob.getConstructorFunction = getConstructorFunction;
     ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;
     return ob;
-}());
\ No newline at end of file
+}());
diff --git a/player/js/utils/shapes/TrimModifier.js b/player/js/utils/shapes/TrimModifier.js
index 0290b50..6a4d73e 100644
--- a/player/js/utils/shapes/TrimModifier.js
+++ b/player/js/utils/shapes/TrimModifier.js
@@ -318,4 +318,4 @@
 };
 
 
-ShapeModifiers.registerModifier('tm', TrimModifier);
\ No newline at end of file
+ShapeModifiers.registerModifier('tm', TrimModifier);
diff --git a/player/js/utils/shapes/shapePathBuilder.js b/player/js/utils/shapes/shapePathBuilder.js
index 13e407c..1d76a34 100644
--- a/player/js/utils/shapes/shapePathBuilder.js
+++ b/player/js/utils/shapes/shapePathBuilder.js
@@ -14,4 +14,4 @@
             shapeString += 'z';
         }
         return shapeString;
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/text/LetterProps.js b/player/js/utils/text/LetterProps.js
index 17ce090..395dc94 100644
--- a/player/js/utils/text/LetterProps.js
+++ b/player/js/utils/text/LetterProps.js
@@ -55,4 +55,4 @@
         updated = true;
     }
     return updated;
-};
\ No newline at end of file
+};
diff --git a/player/js/utils/text/TextAnimatorDataProperty.js b/player/js/utils/text/TextAnimatorDataProperty.js
index cc9ff60..54d25fc 100644
--- a/player/js/utils/text/TextAnimatorDataProperty.js
+++ b/player/js/utils/text/TextAnimatorDataProperty.js
@@ -23,4 +23,4 @@
 
 	this.s = TextSelectorProp.getTextSelectorProp(elem,animatorProps.s, container);
     this.s.t = animatorProps.s.t;
-}
\ No newline at end of file
+}
diff --git a/player/js/utils/text/TextAnimatorProperty.js b/player/js/utils/text/TextAnimatorProperty.js
index f79d664..0fd330f 100644
--- a/player/js/utils/text/TextAnimatorProperty.js
+++ b/player/js/utils/text/TextAnimatorProperty.js
@@ -556,4 +556,4 @@
 
 TextAnimatorProperty.prototype.mHelper = new Matrix();
 TextAnimatorProperty.prototype.defaultPropsArray = [];
-extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);
\ No newline at end of file
+extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);
diff --git a/player/js/utils/text/TextSelectorProperty.js b/player/js/utils/text/TextSelectorProperty.js
index 245a877..9e0822a 100644
--- a/player/js/utils/text/TextSelectorProperty.js
+++ b/player/js/utils/text/TextSelectorProperty.js
@@ -146,4 +146,4 @@
     };
 }());
 
-    
\ No newline at end of file
+    
