diff --git a/docs/data/img/ui/startMenu/5.png b/docs/data/img/ui/startMenu/5.png index 98eb4ba..e64c3af 100644 Binary files a/docs/data/img/ui/startMenu/5.png and b/docs/data/img/ui/startMenu/5.png differ diff --git a/docs/data/img/ui/startMenu/5_hover.png b/docs/data/img/ui/startMenu/5_hover.png index 52e2cee..463dec3 100644 Binary files a/docs/data/img/ui/startMenu/5_hover.png and b/docs/data/img/ui/startMenu/5_hover.png differ diff --git a/docs/js/app.min.js b/docs/js/app.min.js index f08a8a7..c494ae1 100644 --- a/docs/js/app.min.js +++ b/docs/js/app.min.js @@ -1 +1 @@ -if(function(e){"use strict";const t={};"function"==typeof define&&define.amd?define(()=>t):"undefined"!=typeof exports&&("undefined"!=typeof module&&module.exports&&(exports=module.exports=t),exports.me=t),e.me=t}(this),window.onReady=function(e){console.warn("Deprecated: window.onReady, use me.device.onReady instead"),me.device.onReady.call(this,e)},window.throttle||(window.throttle=function(e,t,i){let n,r=window.performance.now();return"boolean"!=typeof t&&(t=!1),function(){const o=window.performance.now(),s=o-r,a=arguments;if(!(s(r=o,i(...a)),s))}}),"undefined"==typeof console&&(console={log(){},info(){},error(){alert(Array.prototype.slice.call(arguments).join(", "))}}),function(){let e=0;const t=["ms","moz","webkit","o"];let i,n=window.requestAnimationFrame,r=window.cancelAnimationFrame;for(i=0;i{t(i+n)},n);return e=i+n,r},r=function(e){window.clearTimeout(e)},window.requestAnimationFrame=n,window.cancelAnimationFrame=r)}(),Function.prototype.defer=function(){return setTimeout(this.bind.apply(this,arguments),.01)},function(){function e(e,t,i){return e.prototype[t].apply(this,i)}const t=function(){Object.apply(this,arguments)};(t.prototype=Object.create(Object.prototype)).constructor=t,Object.defineProperty(t,"extend",{value:function t(){const i={},n=new Array(arguments.length);for(let e=0;e{!function(e,t,i){Object.keys(i).forEach(n=>{if(t[n]=i[n],"function"!=typeof i[n])throw new TypeError(`extend: Method \`${n}\` is not a function`);Object.defineProperty(e.prototype,n,{configurable:!0,value:i[n]})})}(r,i,e.__methods__||e)}),!("init"in r.prototype))throw new TypeError("extend: Class is missing a constructor named `init`");return Object.defineProperty(r.prototype,"_super",{value:e}),Object.defineProperty(r,"__methods__",{value:i}),r.extend=t,r}}),"undefined"!=typeof window?window.Jay=t:module.exports=t}(),me.Object=window.Jay,Object.is||(Object.is=function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}),Object.assign||(Object.assign=function(e){"use strict";if(void 0===e||null===e)throw new TypeError("Cannot convert undefined or null to object");const t=Object(e);for(let e=1;e0?1:-1}),Number.prototype.clamp=function(e,t){return thist?t:+this},Number.prototype.random=function(e,t){return t||(t=e,e=this),~~(Math.random()*(t-e))+e},Number.prototype.randomFloat=function(e,t){return t||(t=e,e=this),Math.random()*(t-e)+e},Number.prototype.weightedRandom=function(e,t){return t||(t=e,e=this),~~(Math.pow(Math.random(),2)*(t-e))+e},Number.prototype.round=function(e,t){const i=Math.pow(10,t||e||0);return~~(.5+(e=arguments.length<2?this:e)*i)/i},Number.prototype.toHex=function(){return"0123456789ABCDEF".charAt(this-this%16>>4)+"0123456789ABCDEF".charAt(this%16)},Number.prototype.degToRad=function(e){return(e||this)/180*Math.PI},Number.prototype.radToDeg=function(e){return(e||this)*(180/Math.PI)},String.prototype.trimLeft||(String.prototype.trimLeft=function(){return this.replace(/^\s+/,"")}),String.prototype.trimRight||(String.prototype.trimRight=function(){return this.replace(/\s+$/,"")}),String.prototype.isNumeric=function(){return!isNaN(this)&&""!==this.trim()},String.prototype.isBoolean=function(){const e=this.trim();return"true"===e||"false"===e},String.prototype.includes||(String.prototype.includes=function(e,t){return"number"!=typeof t&&(t=0),!(t+e.length>this.length)&&-1!==this.indexOf(e,t)}),String.prototype.toHex=function(){let e="",t=0;for(;tthis.length)throw new me.Error("TypedArray pollyfill: Buffer overflow in set");for(let i=0;i{t{"use strict";function e(e){return"function"==typeof e}let t=void 0;const i=t=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};let n=0,r=void 0,o=void 0,s=function(e,t){p[n]=e,p[n+1]=t,2===(n+=2)&&(o?o(f):m())};const a="undefined"!=typeof window?window:void 0,h=a||{},l=h.MutationObserver||h.WebKitMutationObserver,c="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),u="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){const e=setTimeout;return function(){return e(f,1)}}var p=new Array(1e3);function f(){for(let e=0;eD(r,n,e,i._result))}else O(i,n,e,t);return n}function y(e){if(e&&"object"==typeof e&&e.constructor===this)return e;const t=new this(w);return C(t,e),t}m=c?function(){return process.nextTick(f)}:l?function(){let e=0;const t=new l(f),i=document.createTextNode("");return t.observe(i,{characterData:!0}),function(){i.data=e=++e%2}}():u?function(){const e=new MessageChannel;return e.port1.onmessage=f,function(){return e.port2.postMessage(0)}}():void 0===a&&"function"==typeof require?function(){try{const e=require("vertx");return void 0!==(r=e.runOnLoop||e.runOnContext)?function(){r(f)}:d()}catch(e){return d()}}():d();var v=Math.random().toString(36).substring(16);function w(){}const b=void 0,x=1,_=2,T=new M;function E(e){try{return e.then}catch(e){return T.error=e,T}}function A(t,i,n){i.constructor===t.constructor&&n===g&&i.constructor.resolve===y?function(e,t){t._state===x?k(e,t._result):t._state===_?P(e,t._result):O(t,void 0,t=>C(e,t),t=>P(e,t))}(t,i):n===T?(P(t,T.error),T.error=null):void 0===n?k(t,i):e(n)?function(e,t,i){s(e=>{let n=!1;const r=function(e,t,i,n){try{e.call(t,i,n)}catch(e){return e}}(i,t,i=>{n||(n=!0,t!==i?C(e,i):k(e,i))},t=>{n||(n=!0,P(e,t))},e._label);!n&&r&&(n=!0,P(e,r))},e)}(t,i,n):k(t,i)}function C(e,t){e===t?P(e,new TypeError("You cannot resolve a promise with itself")):!function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)}(t)?k(e,t):A(e,t,E(t))}function S(e){e._onerror&&e._onerror(e._result),R(e)}function k(e,t){e._state===b&&(e._result=t,e._state=x,0!==e._subscribers.length&&s(R,e))}function P(e,t){e._state===b&&(e._state=_,e._result=t,s(S,e))}function O(e,t,i,n){const r=e._subscribers,o=r.length;e._onerror=null,r[o]=t,r[o+x]=i,r[o+_]=n,0===o&&e._state&&s(R,e)}function R(e){const t=e._subscribers,i=e._state;if(0===t.length)return;let n=void 0,r=void 0,o=e._result;for(let e=0;et(e)),t)}else this._willSettleAt(n(e),t)},e.prototype._settledAt=function(e,t,i){const n=this.promise;n._state===b&&(this._remaining--,e===_?P(n,i):this._result[t]=i),0===this._remaining&&k(n,this._result)},e.prototype._willSettleAt=function(e,t){const i=this;O(e,void 0,e=>i._settledAt(x,t,e),e=>i._settledAt(_,t,e))},e}();var F=function(){function e(t){this[v]=I++,this._result=this._state=void 0,this._subscribers=[],w!==t&&("function"!=typeof t&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof e?function(e,t){try{t(t=>{C(e,t)},t=>{P(e,t)})}catch(t){P(e,t)}}(this,t):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return e.prototype.catch=function(e){return this.then(null,e)},e.prototype.finally=function(e){const t=this.constructor;return this.then(i=>t.resolve(e()).then(()=>i),i=>t.resolve(e()).then(()=>{throw i}))},e}();return F.prototype.then=g,F.all=function(e){return new L(this,e).promise},F.race=function(e){const t=this;return i(e)?new t((i,n)=>{const r=e.length;for(let o=0;ot(new TypeError("You must pass an array to race.")))},F.resolve=y,F.reject=function(e){const t=new this(w);return P(t,e),t},F._setScheduler=function(e){o=e},F._setAsap=function(e){s=e},F._asap=s,F.polyfill=function(){let e=void 0;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}const t=e.Promise;if(t){let e=null;try{e=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===e&&!t.cast)return}e.Promise=F},F.Promise=F,F.polyfill(),F}),function(){const e=function(e){return e.substring(0,1).toUpperCase()+e.substring(1,e.length)};me.agent=function(){const t={},i=["ms","MS","moz","webkit","o"];return t.prefixed=function(t,n){if(t in(n=n||window))return n[t];const r=e(t);let o;return i.some(e=>{const t=e+r;return o=t in n?n[t]:void 0}),o},t.setPrefixed=function(t,n,r){if(t in(r=r||window))return void(r[t]=n);const o=e(t);i.some(e=>{const t=e+o;return t in r&&(r[t]=n,!0)})},t}()}(),me.device=function(){const e={};let t=!1,i=!1,n=null,r=!0;const o=function(e){return e.preventDefault(),window.scroll(0,0),!1};let s=!1,a=!1,h=[];function l(t){t.reading?(e.accelerationX=t.reading.accelerationX,e.accelerationY=t.reading.accelerationY,e.accelerationZ=t.reading.accelerationZ):(e.accelerationX=t.accelerationIncludingGravity.x,e.accelerationY=t.accelerationIncludingGravity.y,e.accelerationZ=t.accelerationIncludingGravity.z)}function c(t){e.gamma=t.gamma,e.beta=t.beta,e.alpha=t.alpha}return e._domReady=function(e){if(!a){if(!document.body)return setTimeout(me.device._domReady,13);for(document.removeEventListener&&document.removeEventListener("DOMContentLoaded",me.device._domReady,!1),window.removeEventListener("load",me.device._domReady,!1);h.length;)h.shift().call(window,[]);a=!0}},e._check=function(){if(me.device._detectDevice(),me.device.isMobile&&!me.device.cocoon&&e.enableSwipe(!1),me.device.TouchEvent=!!("ontouchstart"in window),me.device.PointerEvent=!!window.PointerEvent,window.gesture=me.agent.prefixed("gesture"),me.device.touch=me.device.cocoon||me.device.TouchEvent||me.device.PointerEvent,me.device.maxTouchPoints=me.device.touch?me.device.PointerEvent?navigator.maxTouchPoints||1:10:1,me.device.wheel="onwheel"in document.createElement("div"),me.device.hasAccelerometer=void 0!==window.DeviceMotionEvent||void 0!==window.Windows&&"function"==typeof Windows.Devices.Sensors.Accelerometer,this.hasPointerLockSupport=me.agent.prefixed("pointerLockElement",document),this.hasPointerLockSupport&&(document.exitPointerLock=me.agent.prefixed("exitPointerLock",document)),window.DeviceOrientationEvent&&(me.device.hasDeviceOrientation=!0),void 0!==window.screen){const e=window.screen;e.orientation=me.agent.prefixed("orientation",e),e.lockOrientation=me.agent.prefixed("lockOrientation",e),e.unlockOrientation=me.agent.prefixed("unlockOrientation",e)}this.hasFullscreenSupport=me.agent.prefixed("fullscreenEnabled",document)||document.mozFullScreenEnabled,document.exitFullscreen=me.agent.prefixed("cancelFullScreen",document)||me.agent.prefixed("exitFullscreen",document),navigator.vibrate=me.agent.prefixed("vibrate",navigator);try{e.localStorage=!!window.localStorage}catch(t){e.localStorage=!1}let t,i;window.addEventListener("blur",()=>{me.sys.stopOnBlur&&me.state.stop(!0),me.sys.pauseOnBlur&&me.state.pause(!0)},!1),window.addEventListener("focus",()=>{me.sys.stopOnBlur&&me.state.restart(!0),me.sys.resumeOnFocus&&me.state.resume(!0)},!1),void 0!==document.hidden?(t="hidden",i="visibilitychange"):void 0!==document.mozHidden?(t="mozHidden",i="mozvisibilitychange"):void 0!==document.msHidden?(t="msHidden",i="msvisibilitychange"):void 0!==document.webkitHidden&&(t="webkitHidden",i="webkitvisibilitychange"),"string"==typeof i&&document.addEventListener(i,()=>{document[t]?(me.sys.stopOnBlur&&me.state.stop(!0),me.sys.pauseOnBlur&&me.state.pause(!0)):(me.sys.stopOnBlur&&me.state.restart(!0),me.sys.resumeOnFocus&&me.state.resume(!0))},!1)},e._detectDevice=function(){me.device.iOS=/iPhone|iPad|iPod/i.test(me.device.ua),me.device.android=/Android/i.test(me.device.ua),me.device.android2=/Android 2/i.test(me.device.ua),me.device.chromeOS=/CrOS/.test(me.device.ua),me.device.wp=/Windows Phone/i.test(me.device.ua),me.device.BlackBerry=/BlackBerry/i.test(me.device.ua),me.device.Kindle=/Kindle|Silk.*Mobile Safari/i.test(me.device.ua),me.device.isMobile=/Mobi/i.test(me.device.ua)||me.device.iOS||me.device.android||me.device.wp||me.device.BlackBerry||me.device.Kindle||!1,me.device.ejecta=void 0!==window.ejecta,me.device.cocoon=navigator.isCocoonJS||void 0!==window.Cocoon},e.ua=navigator.userAgent,e.localStorage=!1,e.hasAccelerometer=!1,e.hasDeviceOrientation=!1,e.hasFullscreenSupport=!1,e.hasPointerLockSupport=!1,e.nativeBase64="function"==typeof window.atob,e.maxTouchPoints=1,e.touch=!1,e.wheel=!1,e.isMobile=!1,e.iOS=!1,e.android=!1,e.android2=!1,e.ejecta=!1,e.cocoon=!1,e.chromeOS=!1,e.wp=!1,e.BlackBerry=!1,e.Kindle=!1,e.accelerationX=0,e.accelerationY=0,e.accelerationZ=0,e.gamma=0,e.beta=0,e.alpha=0,e.language=navigator.language||navigator.browserLanguage||navigator.userLanguage||"en",e.onReady=function(e){a?e.call(window,[]):(h.push(e),s||("complete"===document.readyState?window.setTimeout(me.device._domReady,0):(document.addEventListener&&document.addEventListener("DOMContentLoaded",me.device._domReady,!1),window.addEventListener("load",me.device._domReady,!1)),s=!0))},e.enableSwipe=function(e){!1!==e?!1===r&&(window.document.removeEventListener("touchmove",o,!1),r=!0):!0===r&&(window.document.addEventListener("touchmove",o,!1),r=!1)},e.requestFullscreen=function(e){this.hasFullscreenSupport&&((e=e||me.video.getWrapper()).requestFullscreen=me.agent.prefixed("requestFullscreen",e)||e.mozRequestFullScreen,e.requestFullscreen())},e.exitFullscreen=function(){this.hasFullscreenSupport&&document.exitFullscreen()},e.getPixelRatio=function(){if(null===n){let e;e=void 0!==me.video.renderer?me.video.renderer.getScreenContext():me.Renderer.prototype.getContext2d(document.createElement("canvas"));let t=window.devicePixelRatio||1,i=me.agent.prefixed("backingStorePixelRatio",e)||1;n=t/i}return n},e.getScreenOrientation=function(){const e=window.screen;if(void 0!==e){const t=e.orientation;if(void 0!==t&&(t.type,1))return t.type;if("string"==typeof t)return t}return"number"==typeof window.orientation?90===Math.abs(window.orientation)?"landscape":"portrait":window.outerWidth>window.outerHeight?"landscape":"portrait"},e.lockOrientation=function(e){return void 0!==window.screen&&void 0!==screen.lockOrientation&&screen.lockOrientation(e)},e.unlockOrientation=function(e){return void 0!==window.screen&&void 0!==screen.unlockOrientation&&screen.unlockOrientation(e)},e.isPortrait=function(){return me.device.getScreenOrientation().includes("portrait")},e.isLandscape=function(){return me.device.getScreenOrientation().includes("landscape")},e.getStorage=function(e){switch(e=e||"local"){case"local":return me.save;default:throw new me.Error(`storage type ${e} not supported`)}},e.turnOnPointerLock=function(){if(this.hasPointerLockSupport){const t=me.video.getWrapper();if(me.device.ua.match(/Firefox/i)){var e=function(){(me.agent.prefixed("fullscreenElement",document)||document.mozFullScreenElement)===t&&(document.removeEventListener("fullscreenchange",e),document.removeEventListener("mozfullscreenchange",e),t.requestPointerLock=me.agent.prefixed("requestPointerLock",t),t.requestPointerLock())};document.addEventListener("fullscreenchange",e,!1),document.addEventListener("mozfullscreenchange",e,!1),me.device.requestFullscreen()}else t.requestPointerLock()}},e.turnOffPointerLock=function(){this.hasPointerLockSupport&&document.exitPointerLock()},e.watchAccelerometer=function(){if(me.device.hasAccelerometer){if(!t){if("undefined"==typeof Windows)window.addEventListener("devicemotion",l,!1);else{const e=Windows.Devices.Sensors.Accelerometer.getDefault();if(e){const t=e.minimumReportInterval,i=t>=16?t:25;e.reportInterval=i,e.addEventListener("readingchanged",l,!1)}}t=!0}return!0}return!1},e.unwatchAccelerometer=function(){t&&("undefined"==typeof Windows?window.removeEventListener("devicemotion",l,!1):Windows.Device.Sensors.Accelerometer.getDefault().removeEventListener("readingchanged",l,!1),t=!1)},e.watchDeviceOrientation=function(){return me.device.hasDeviceOrientation&&!i&&(window.addEventListener("deviceorientation",c,!1),i=!0),!1},e.unwatchDeviceOrientation=function(){i&&(window.removeEventListener("deviceorientation",c,!1),i=!1)},e.vibrate=function(e){navigator.vibrate&&navigator.vibrate(e)},e}(),Object.defineProperty(me.device,"isFullscreen",{get:()=>!(!me.device.hasFullscreenSupport||!me.agent.prefixed("fullscreenElement",document)&&!document.mozFullScreenElement)}),Object.defineProperty(me.device,"sound",{get:()=>!Howler.noAudio}),me.game=function(){const e={};let t=!1,i=!0,n=!1,r=0,o=1,s=0,a=0,h=0,l=1e3/60,c=0,u=null,d=0,p=null;return e.viewport=null,e.world=null,e.mergeGroup=!0,e.sortOn="z",e.onLevelLoaded=function(){},e.HASH=null,e.init=function(n,r){t||(n=n||me.video.renderer.getWidth(),r=r||me.video.renderer.getHeight(),e.viewport=new me.Viewport(0,0,n,r),e.world=new me.Container(0,0,n,r),e.world.name="rootContainer",e.world._root=!0,e.world.anchorPoint.set(0,0),me.collision.init(),p=me.video.renderer,me.event.publish(me.event.GAME_INIT),me.input._translatePointerEvents(),i=!0,t=!0)},e.reset=function(){me.collision.quadTree.clear(),e.world.destroy(),e.world.anchorPoint.set(0,0),e.viewport&&e.viewport.reset(),p.reset(),me.event.publish(me.event.GAME_RESET),e.updateFrameRate()},e.updateFrameRate=function(){r=0,o=~~(.5+60/me.sys.fps),l=1e3/me.sys.updatesPerSecond,s=0,a=10*l,n=me.sys.fps>me.sys.updatesPerSecond},e.getParentContainer=function(e){return e.ancestor},e.repaint=function(){i=!0},e.update=function(t){if(++r%o==0)for(r=0,me.timer.update(t),me.input._updateGamepads(),s+=me.timer.getDelta(),s=Math.min(s,a),c=me.sys.interpolation?me.timer.getDelta():l,h=me.sys.interpolation?c:Math.max(c,d);s>=h||me.sys.interpolation;)if(u=window.performance.now(),me.collision.quadTree.clear(),me.collision.quadTree.insertContainer(e.world),i=e.world.update(c)||i,i=e.viewport.update(c)||i,me.timer.lastUpdate=window.performance.now(),d=me.timer.lastUpdate-u,s-=h,me.sys.interpolation){s=0;break}},e.draw=function(t){if(i||n){const i=(t=t||e.viewport).pos.x+t.offset.x,n=t.pos.y+t.offset.y;e.world.currentTransform.translate(-i,-n),p.clear(),t.preDraw(p),e.world.preDraw(p),e.world.draw(p,t),t.draw(p),e.world.postDraw(p),t.postDraw(p),e.world.currentTransform.translate(i,n)}i=!1,p.flush()},e}(),function(){me.mod="melonJS",me.version="5.1.0",me.sys={fps:60,updatesPerSecond:60,interpolation:!1,scale:null,gravity:void 0,stopOnAudioError:!0,pauseOnBlur:!0,resumeOnFocus:!0,stopOnBlur:!1,preRender:!1,checkVersion(e,t){t=t||me.version;const i=e.split("."),n=t.split("."),r=Math.min(i.length,n.length);let o=0;for(let e=0;e""!==e).forEach(t=>{const i=t.split("="),n=i.shift(),r=i.join("=");e[n]=r||!0}),e}(),me.loader.setNocache(me.game.HASH.nocache||!1),me.timer.init(),me.state.init(),me.pool.init(),!1===me.device.isMobile&&me.input._enableKeyboardEvent(),me.levelDirector.reset(),e=!0)},!1===me.skipAutoInit?me.device.onReady(()=>{me.boot()}):me.init=function(){me.boot(),me.device._domReady()}}(),me.timer=function(){const e={};let t=0,i=0,n=0,r=0,o=0;const s=Math.ceil(1e3/me.sys.fps),a=1e3/me.sys.fps*1.25,h=[];let l=0;const c=function(e){for(let t=0,i=h.length;ta&&me.sys.interpolation?o/s:1,function(e){for(let t=0,i=h.length;t=i.delay&&(i.fn.apply(this),!0===i.repeat?i.elapsed-=i.delay:me.timer.clearTimeout(i.timerId))}}(o),o},e}(),me.pool=function(){const e={},t={};return e.init=function(){e.register("me.Entity",me.Entity),e.register("me.CollectableEntity",me.CollectableEntity),e.register("me.LevelEntity",me.LevelEntity),e.register("me.Tween",me.Tween,!0),e.register("me.Color",me.Color,!0),e.register("me.Particle",me.Particle,!0),e.register("me.Sprite",me.Sprite),e.register("me.Vector2d",me.Vector2d,!0),e.register("me.Glyph",me.Glyph,!0),e.register("me.Matrix2d",me.Matrix2d,!0)},e.register=function(e,i,n){if(void 0===i)throw new me.Error(`Cannot register object '${e}', invalid class`);t[e]={class:i,pool:n?[]:void 0}},e.pull=function(e){const i=new Array(arguments.length);for(let e=0;ee.x?this.x:e.x,this.y>e.y?this.y:e.y)},floor(){return new me.Vector2d(Math.floor(this.x),Math.floor(this.y))},floorSelf(){return this._set(Math.floor(this.x),Math.floor(this.y))},ceil(){return new me.Vector2d(Math.ceil(this.x),Math.ceil(this.y))},ceilSelf(){return this._set(Math.ceil(this.x),Math.ceil(this.y))},negate(){return new me.Vector2d(-this.x,-this.y)},negateSelf(){return this._set(-this.x,-this.y)},copy(e){return this._set(e.x,e.y)},equals(e){return this.x===e.x&&this.y===e.y},normalize(){const e=this.length();return e>0?this._set(this.x/e,this.y/e):this},perp(){return this._set(this.y,-this.x)},rotate(e){const t=this.x,i=this.y;return this._set(t*Math.cos(e)-i*Math.sin(e),t*Math.sin(e)+i*Math.cos(e))},dotProduct(e){return this.x*e.x+this.y*e.y},length2(){return this.dotProduct(this)},length(){return Math.sqrt(this.length2())},distance(e){let t=this.x-e.x,i=this.y-e.y;return Math.sqrt(t*t+i*i)},angle(e){return Math.acos((this.dotProduct(e)/(this.length()*e.length())).clamp(-1,1))},project(e){return this.scale(this.dotProduct(e)/e.length2())},projectN(e){return this.scale(this.dotProduct(e))},clone(){return new me.Vector2d(this.x,this.y)},toString(){return`x:${this.x},y:${this.y}`}}),me.Vector2d.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.Vector2d.Error"}}),me.Vector3d=me.Object.extend({init(e,t,i){return this.set(e||0,t||0,i||0)},_set(e,t,i){return this.x=e,this.y=t,this.z=i,this},set(e,t,i){if(e!==+e||t!==+t||i!==+i)throw new me.Vector3d.Error("invalid x, y, z parameters (not a number)");return this._set(e,t,i)},setZero(){return this.set(0,0,0)},setV(e){return this._set(e.x,e.y,void 0!==e.z?e.z:this.z)},add(e){return this._set(this.x+e.x,this.y+e.y,this.z+(e.z||0))},sub(e){return this._set(this.x-e.x,this.y-e.y,this.z-(e.z||0))},scale(e,t,i){return t=void 0!==t?t:e,i=void 0!==i?i:e,this._set(this.x*e,this.y*t,this.z*i)},scaleV(e){return this._set(this.x*e.x,this.y*e.y,this.z*(e.z||1))},toIso(){return this._set(this.x-this.y,.5*(this.x+this.y),this.z)},to2d(){return this._set(this.y+this.x/2,this.y-this.x/2,this.z)},div(e){return this._set(this.x/e,this.y/e,this.z/e)},abs(){return this._set(this.x<0?-this.x:this.x,this.y<0?-this.y:this.y,this.z<0?-this.z:this.z)},clamp(e,t){return new me.Vector3d(this.x.clamp(e,t),this.y.clamp(e,t),this.z.clamp(e,t))},clampSelf(e,t){return this._set(this.x.clamp(e,t),this.y.clamp(e,t),this.z.clamp(e,t))},minV(e){const t=e.z||0;return this._set(this.xe.x?this.x:e.x,this.y>e.y?this.y:e.y,this.z>t?this.z:t)},floor(){return new me.Vector3d(Math.floor(this.x),Math.floor(this.y),Math.floor(this.z))},floorSelf(){return this._set(Math.floor(this.x),Math.floor(this.y),Math.floor(this.z))},ceil(){return new me.Vector3d(Math.ceil(this.x),Math.ceil(this.y),Math.ceil(this.z))},ceilSelf(){return this._set(Math.ceil(this.x),Math.ceil(this.y),Math.ceil(this.z))},negate(){return new me.Vector3d(-this.x,-this.y,-this.z)},negateSelf(){return this._set(-this.x,-this.y,-this.z)},copy(e){return this._set(e.x,e.y,void 0!==e.z?e.z:this.z)},equals(e){return this.x===e.x&&this.y===e.y&&this.z===(e.z||this.z)},normalize(){const e=this.length();return e>0?this._set(this.x/e,this.y/e,this.z/e):this},perp(){return this._set(this.y,-this.x,this.z)},rotate(e){const t=this.x,i=this.y;return this._set(t*Math.cos(e)-i*Math.sin(e),t*Math.sin(e)+i*Math.cos(e),this.z)},dotProduct(e){return this.x*e.x+this.y*e.y+this.z*(e.z||1)},length2(){return this.dotProduct(this)},length(){return Math.sqrt(this.length2())},distance(e){let t=this.x-e.x,i=this.y-e.y,n=this.z-(e.z||0);return Math.sqrt(t*t+i*i+n*n)},angle(e){return Math.acos((this.dotProduct(e)/(this.length()*e.length())).clamp(-1,1))},project(e){return this.scale(this.dotProduct(e)/e.length2())},projectN(e){return this.scale(this.dotProduct(e))},clone(){return new me.Vector3d(this.x,this.y,this.z)},toString(){return`x:${this.x},y:${this.y},z:${this.z}`}}),me.Vector3d.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.Vector3d.Error"}}),me.ObservableVector2d=me.Vector2d.extend({init(e,t,i){if(Object.defineProperty(this,"x",{get(){return this._x},set(e){const t=this.onUpdate(e,this._y,this._x,this._y);this._x=t&&"x"in t?t.x:e}}),Object.defineProperty(this,"y",{get(){return this._y},set(e){const t=this.onUpdate(this._x,e,this._x,this._y);this._y=t&&"y"in t?t.y:e}}),void 0===i)throw new me.ObservableVector2d.Error("undefined `onUpdate` callback");this.setCallback(i.onUpdate),this._x=e||0,this._y=t||0},_set(e,t){const i=this.onUpdate(e,t,this._x,this._y);return i&&"x"in i&&"y"in i?(this._x=i.x,this._y=i.y):(this._x=e,this._y=t),this},setMuted(e,t){return this._x=e,this._y=t,this},setCallback(e){if("function"!=typeof e)throw new me.ObservableVector2d.Error("invalid `onUpdate` callback");return this.onUpdate=e,this},add(e){return this._set(this._x+e.x,this._y+e.y)},sub(e){return this._set(this._x-e.x,this._y-e.y)},scale(e,t){return this._set(this._x*e,this._y*(void 0!==t?t:e))},scaleV(e){return this._set(this._x*e.x,this._y*e.y)},div(e){return this._set(this._x/e,this._y/e)},abs(){return this._set(this._x<0?-this._x:this._x,this._y<0?-this._y:this._y)},clamp(e,t){return new me.ObservableVector2d(this.x.clamp(e,t),this.y.clamp(e,t),{onUpdate:this.onUpdate})},clampSelf(e,t){return this._set(this._x.clamp(e,t),this._y.clamp(e,t))},minV(e){return this._set(this._xe.x?this._x:e.x,this._y>e.y?this._y:e.y)},floor(){return new me.ObservableVector2d(Math.floor(this._x),Math.floor(this._y),{onUpdate:this.onUpdate})},floorSelf(){return this._set(Math.floor(this._x),Math.floor(this._y))},ceil(){return new me.ObservableVector2d(Math.ceil(this._x),Math.ceil(this._y),{onUpdate:this.onUpdate})},ceilSelf(){return this._set(Math.ceil(this._x),Math.ceil(this._y))},negate(){return new me.ObservableVector2d(-this._x,-this._y,{onUpdate:this.onUpdate})},negateSelf(){return this._set(-this._x,-this._y)},copy(e){return this._set(e.x,e.y)},equals(e){return this._x===e.x&&this._y===e.y},normalize(){const e=this.length();return e>0?this._set(this._x/e,this._y/e):this},perp(){return this._set(this._y,-this._x)},rotate(e){const t=this._x,i=this._y;return this._set(t*Math.cos(e)-i*Math.sin(e),t*Math.sin(e)+i*Math.cos(e))},dotProduct(e){return this._x*e.x+this._y*e.y},distance(e){return Math.sqrt((this._x-e.x)*(this._x-e.x)+(this._y-e.y)*(this._y-e.y))},clone(){return new me.ObservableVector2d(this._x,this._y,{onUpdate:this.onUpdate})},toVector2d(){return new me.Vector2d(this._x,this._y)},toString(){return`x:${this._x},y:${this._y}`}}),me.ObservableVector2d.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.ObservableVector2d.Error"}}),me.ObservableVector3d=me.Vector3d.extend({init(e,t,i,n){if(Object.defineProperty(this,"x",{get(){return this._x},set(e){const t=this.onUpdate(e,this._y,this._z,this._x,this._y,this._z);this._x=t&&"x"in t?t.x:e}}),Object.defineProperty(this,"y",{get(){return this._y},set(e){const t=this.onUpdate(this._x,e,this._z,this._x,this._y,this._z);this._y=t&&"y"in t?t.y:e}}),Object.defineProperty(this,"z",{get(){return this._z},set(e){const t=this.onUpdate(this._x,this._y,e,this._x,this._y,this._z);this._z=t&&"z"in t?t.z:e}}),void 0===n)throw new me.ObservableVector3d.Error("undefined `onUpdate` callback");this.setCallback(n.onUpdate),this._x=e||0,this._y=t||0,this._z=i||0},_set(e,t,i){const n=this.onUpdate(e,t,i,this._x,this._y,this._z);return n&&"x"in n&&"y"in n&&"z"in n?(this._x=n.x,this._y=n.y,this._z=n.z):(this._x=e,this._y=t,this._z=i),this},setMuted(e,t,i){return this._x=e,this._y=t,this._z=i,this},setCallback(e){if("function"!=typeof e)throw new me.ObservableVector3d.Error("invalid `onUpdate` callback");return this.onUpdate=e,this},add(e){return this._set(this._x+e.x,this._y+e.y,this._z+(e.z||0))},sub(e){return this._set(this._x-e.x,this._y-e.y,this._z-(e.z||0))},scale(e,t,i){return t=void 0!==t?t:e,i=void 0!==i?i:e,this._set(this._x*e,this._y*t,this._z*i)},scaleV(e){return this._set(this._x*e.x,this._y*e.y,this._z*(e.z||1))},div(e){return this._set(this._x/e,this._y/e,this._z/e)},abs(){return this._set(this._x<0?-this._x:this._x,this._y<0?-this._y:this._y,this._Z<0?-this._z:this._z)},clamp(e,t){return new me.ObservableVector3d(this._x.clamp(e,t),this._y.clamp(e,t),this._z.clamp(e,t),{onUpdate:this.onUpdate})},clampSelf(e,t){return this._set(this._x.clamp(e,t),this._y.clamp(e,t),this._z.clamp(e,t))},minV(e){const t=e.z||0;return this._set(this._xe.x?this._x:e.x,this._y>e.y?this._y:e.y,this._z>t?this._z:t)},floor(){return new me.ObservableVector3d(Math.floor(this._x),Math.floor(this._y),Math.floor(this._z),{onUpdate:this.onUpdate})},floorSelf(){return this._set(Math.floor(this._x),Math.floor(this._y),Math.floor(this._z))},ceil(){return new me.ObservableVector3d(Math.ceil(this._x),Math.ceil(this._y),Math.ceil(this._z),{onUpdate:this.onUpdate})},ceilSelf(){return this._set(Math.ceil(this._x),Math.ceil(this._y),Math.ceil(this._z))},negate(){return new me.ObservableVector3d(-this._x,-this._y,-this._z,{onUpdate:this.onUpdate})},negateSelf(){return this._set(-this._x,-this._y,-this._z)},copy(e){return this._set(e.x,e.y,void 0!==e.z?e.z:this._z)},equals(e){return this._x===e.x&&this._y===e.y&&this._z===(e.z||this._z)},normalize(){const e=this.length();return e>0?this._set(this._x/e,this._y/e,this._z/e):this},perp(){return this._set(this._y,-this._x,this._z)},rotate(e){const t=this._x,i=this._y;return this._set(t*Math.cos(e)-i*Math.sin(e),t*Math.sin(e)+i*Math.cos(e),this._z)},dotProduct(e){return this._x*e.x+this._y*e.y+this._z*(e.z||1)},distance(e){let t=this._x-e.x,i=this._y-e.y,n=this._z-(e.z||0);return Math.sqrt(t*t+i*i+n*n)},clone(){return new me.ObservableVector3d(this._x,this._y,this._z,{onUpdate:this.onUpdate})},toVector3d(){return new me.Vector3d(this._x,this._y,this._z)},toString(){return`x:${this._x},y:${this._y},z:${this._z}`}}),me.ObservableVector3d.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.ObservableVector3d.Error"}}),me.Matrix2d=me.Object.extend({init(){void 0===this.val&&(this.val=new Float32Array(9)),arguments.length&&arguments[0]instanceof me.Matrix2d?this.copy(arguments[0]):arguments.length>=6?this.setTransform.apply(this,arguments):this.identity()},identity(){return this.setTransform(1,0,0,0,1,0,0,0,1),this},setTransform(){const e=this.val;return 9===arguments.length?(e[0]=arguments[0],e[1]=arguments[1],e[2]=arguments[2],e[3]=arguments[3],e[4]=arguments[4],e[5]=arguments[5],e[6]=arguments[6],e[7]=arguments[7],e[8]=arguments[8]):6===arguments.length&&(e[0]=arguments[0],e[1]=arguments[2],e[2]=arguments[4],e[3]=arguments[1],e[4]=arguments[3],e[5]=arguments[5],e[6]=0,e[7]=0,e[8]=1),this},copy(e){return this.val.set(e.val),this},multiply(e){e=e.val;let t=this.val,i=t[0],n=t[1],r=t[3],o=t[4],s=e[0],a=e[1],h=e[3],l=e[4],c=e[6],u=e[7];return t[0]=i*s+r*a,t[1]=n*s+o*a,t[3]=i*h+r*l,t[4]=n*h+o*l,t[6]+=i*c+r*u,t[7]+=n*c+o*u,this},transpose(){let e,t=this.val;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this},invert(){const e=this.val;let t=e[0],i=e[1],n=e[2],r=e[3],o=e[4],s=e[5],a=e[6],h=e[7],l=e[8],c=l*o-s*h,u=s*a-l*r,d=h*r-o*a;const p=t*c+i*u+n*d;return e[0]=c/p,e[1]=(n*h-l*i)/p,e[2]=(s*i-n*o)/p,e[3]=u/p,e[4]=(l*t-n*a)/p,e[5]=(n*r-s*t)/p,e[6]=d/p,e[7]=(i*a-h*t)/p,e[8]=(o*t-i*r)/p,this},multiplyVector(e){let t=this.val,i=e.x,n=e.y;return e.x=i*t[0]+n*t[3]+t[6],e.y=i*t[1]+n*t[4]+t[7],e},multiplyVectorInverse(e){let t=this.val,i=e.x,n=e.y;const r=1/(t[0]*t[4]+t[3]*-t[1]);return e.x=t[4]*r*i+-t[3]*r*n+(t[7]*t[3]-t[6]*t[4])*r,e.y=t[0]*r*n+-t[1]*r*i+(-t[7]*t[0]+t[6]*t[1])*r,e},scale(e,t){let i=this.val,n=e,r=void 0===t?n:t;return i[0]*=n,i[1]*=n,i[3]*=r,i[4]*=r,this},scaleV(e){return this.scale(e.x,e.y)},scaleX(e){return this.scale(e,1)},scaleY(e){return this.scale(1,e)},rotate(e){if(0!==e){let t=this.val,i=t[0],n=t[1],r=t[3],o=t[4],s=Math.sin(e),a=Math.cos(e);t[0]=i*a+r*s,t[1]=n*a+o*s,t[3]=i*-s+r*a,t[4]=n*-s+o*a}return this},translate(e,t){const i=this.val;return i[6]+=i[0]*e+i[3]*t,i[7]+=i[1]*e+i[4]*t,this},translateV(e){return this.translate(e.x,e.y)},isIdentity(){const e=this.val;return 1===e[0]&&0===e[1]&&0===e[2]&&0===e[3]&&1===e[4]&&0===e[5]&&0===e[6]&&0===e[7]&&1===e[8]},clone(){return me.pool.pull("me.Matrix2d",this)},toString(){const e=this.val;return`me.Matrix2d(${e[0]}, ${e[1]}, ${e[2]}, ${e[3]}, ${e[4]}, ${e[5]}, ${e[6]}, ${e[7]}, ${e[8]})`}}),me.Ellipse=me.Object.extend({init(e,t,i,n){this.pos=new me.Vector2d,this._bounds=void 0,this.radius=NaN,this.radiusV=new me.Vector2d,this.radiusSq=new me.Vector2d,this.ratio=new me.Vector2d,this.shapeType="Ellipse",this.setShape(e,t,i,n)},setShape(e,t,i,n){const r=i/2,o=n/2;this.pos.set(e,t),this.radius=Math.max(r,o),this.ratio.set(r/this.radius,o/this.radius),this.radiusV.set(this.radius,this.radius).scaleV(this.ratio);const s=this.radius*this.radius;return this.radiusSq.set(s,s).scaleV(this.ratio),this.updateBounds(),this},rotate(){return this},scale(e,t){return t=void 0!==t?t:e,this.setShape(this.pos.x,this.pos.y,2*this.radiusV.x*e,2*this.radiusV.y*t)},scaleV(e){return this.scale(e.x,e.y)},transform(){return this},translate(e,t){return this.pos.x+=e,this.pos.y+=t,this._bounds.translate(e,t),this},translateV(e){return this.pos.add(e),this._bounds.translateV(e),this},containsPointV(e){return this.containsPoint(e.x,e.y)},containsPoint(e,t){return e-=this.pos.x,t-=this.pos.y,e*e/this.radiusSq.x+t*t/this.radiusSq.y<=1},getBounds(){return this._bounds},updateBounds(){let e=this.radiusV.x,t=this.radiusV.y,i=this.pos.x-e,n=this.pos.y-t,r=2*e,o=2*t;return this._bounds?this._bounds.setShape(i,n,r,o):this._bounds=new me.Rect(i,n,r,o),this._bounds},clone(){return new me.Ellipse(this.pos.x,this.pos.y,2*this.radiusV.x,2*this.radiusV.y)}}),me.Polygon=me.Object.extend({init(e,t,i){this.pos=new me.Vector2d,this._bounds=void 0,this.points=null,this.shapeType="Polygon",this.setShape(e,t,i)},setShape(e,t,i){return this.pos.set(e,t),this.points=i,this.recalc(),this.updateBounds(),this},transform(e){const t=this.points,i=t.length;for(let n=0;nt!=c>t&&e<(u-l)*(t-s)/(c-s)+l&&(i=!i)}return i},getBounds(){return this._bounds},updateBounds(){return this._bounds||(this._bounds=new me.Rect(0,0,0,0)),this._bounds.setPoints(this.points),this._bounds.translateV(this.pos),this._bounds},clone(){const e=[];return this.points.forEach(t=>{e.push(new me.Vector2d(t.x,t.y))}),new me.Polygon(this.pos.x,this.pos.y,e)}}),me.Polygon.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.Polygon.Error"}}),me.Rect=me.Polygon.extend({init(e,t,i,n){this.pos=new me.Vector2d,this.shapeType="Rectangle",this.setShape(e,t,[new me.Vector2d(0,0),new me.Vector2d(i,0),new me.Vector2d(i,n),new me.Vector2d(0,n)])},setShape(e,t,i,n){let r=i;return 4===arguments.length&&((r=this.points)[0].set(0,0),r[1].set(i,0),r[2].set(i,n),r[3].set(0,n)),me.Polygon.prototype.setShape.apply(this,[e,t,r]),this._width=this.points[2].x,this._height=this.points[2].y,this},resize(e,t){return this.width=e,this.height=t,this},getBounds(){return this},setPoints(e){let t=1/0,i=1/0,n=-1/0,r=-1/0;return e.forEach(e=>{t=Math.min(t,e.x),i=Math.min(i,e.y),n=Math.max(n,e.x),r=Math.max(r,e.y)}),this.setShape(t,i,n-t,r-i),this},recalc(){return me.Polygon.prototype.recalc.apply(this),this._width=this.points[2].x,this._height=this.points[2].y,this},updateBounds(){return this},clone(){return new me.Rect(this.pos.x,this.pos.y,this._width,this._height)},copy(e){return this.setShape(e.pos.x,e.pos.y,e._width,e._height)},translate(e,t){return this.pos.x+=e,this.pos.y+=t,this},translateV(e){return this.translate(e.x,e.y)},union(e){const t=Math.min(this.left,e.left),i=Math.min(this.top,e.top);return this.resize(Math.max(this.right,e.right)-t,Math.max(this.bottom,e.bottom)-i),this.pos.set(t,i),this},overlaps(e){return this.left=this.left&&e.right<=this.right&&e.top>=this.top&&e.bottom<=this.bottom},containsPoint(e,t){return e>=this.left&&e<=this.right&&t>=this.top&&t<=this.bottom},toPolygon(){return new me.Polygon(this.pos.x,this.pos.y,this.points)}}),Object.defineProperty(me.Rect.prototype,"left",{get(){return this.pos.x},configurable:!0}),Object.defineProperty(me.Rect.prototype,"right",{get(){const e=this._width;return this.pos.x+e||e},configurable:!0}),Object.defineProperty(me.Rect.prototype,"top",{get(){return this.pos.y},configurable:!0}),Object.defineProperty(me.Rect.prototype,"bottom",{get(){const e=this._height;return this.pos.y+e||e},configurable:!0}),Object.defineProperty(me.Rect.prototype,"width",{get(){return this._width},set(e){this.points[1].x=this.points[2].x=e,this.recalc()},configurable:!0}),Object.defineProperty(me.Rect.prototype,"height",{get(){return this._height},set(e){this.points[2].y=this.points[3].y=e,this.recalc()},configurable:!0}),me.Line=me.Polygon.extend({containsPointV(e){return this.containsPoint(e.x,e.y)},containsPoint(e,t){e-=this.pos.x,t-=this.pos.y;const i=this.points[0],n=this.points[1];return(t-i.y)*(n.x-i.x)==(n.y-i.y)*(e-i.x)},recalc(){const e=this.edges=[],t=this.normals=[],i=this.points;if(2!==i.length)throw new me.Line.Error("Requires exactly 2 points");const n=(new me.Vector2d).copy(i[1]).sub(i[0]);return e.push(n),t.push((new me.Vector2d).copy(n).perp().normalize()),this},clone(){const e=[];return this.points.forEach(t=>{e.push(new me.Vector2d(t.x,t.y))}),new me.Line(this.pos.x,this.pos.y,e)}}),me.Line.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.Line.Error"}}),me.Body=me.Rect.extend({init(e,t,i){if(this.ancestor=e,this.shapes=[],this.collisionMask=me.collision.types.ALL_OBJECT,this.collisionType=me.collision.types.ENEMY_OBJECT,void 0===this.vel&&(this.vel=new me.Vector2d),this.vel.set(0,0),void 0===this.accel&&(this.accel=new me.Vector2d),this.accel.set(0,0),void 0===this.friction&&(this.friction=new me.Vector2d),this.friction.set(0,0),this.bounce=0,void 0===this.maxVel&&(this.maxVel=new me.Vector2d),this.maxVel.set(1e3,1e3),this.gravity=void 0!==me.sys.gravity?me.sys.gravity:.98,this.falling=!1,this.jumping=!1,me.Rect.prototype.init.apply(this,[0,0,this.ancestor.width,this.ancestor.height]),"function"==typeof i&&(this.onBodyUpdate=i),void 0!==t){for(let e=0;e{e.name===t&&(n=e)}),void 0===n)throw new me.Body.Error(`Identifier (${t}) undefined for the given PhysicsEditor JSON object)`);this.pos.set(n.origin.x,1-n.origin.y).scale(i);const r=this;n.polygons.forEach(e=>{const t=[];e.forEach(e=>{t.push(new me.Vector2d(e.x,1-e.y).scale(i))}),r.addShape(new me.Polygon(0,0,t),!0)}),n.circles.forEach(e=>{r.addShape(new me.Ellipse(e.cx*i,(1-e.cy)*i,2*e.r*i,2*e.r*i),!0)})}return this.updateBounds(),this.shapes.length},getShape(e){return this.shapes[e||0]},removeShape(e){return this.shapes.remove(e),this.updateBounds(),this.shapes.length},removeShapeAt(e){return this.removeShape(this.getShape(e))},setCollisionMask(e){this.collisionMask=e},respondToCollision(e){const t=e.overlapV;if(this.ancestor.pos.sub(t),0!==t.x&&(this.vel.x=~~(.5+this.vel.x-t.x)||0,this.bounce>0&&(this.vel.x*=-this.bounce)),0!==t.y){this.vel.y=~~(.5+this.vel.y-t.y)||0,this.bounce>0&&(this.vel.y*=-this.bounce);const e=Math.sign(this.gravity)||1;this.falling=t.y>=e,this.jumping=t.y<=-e}},updateBounds(){if(this.shapes.length>0){const e=this.shapes[0].getBounds();this.pos.setV(e.pos),this.resize(e.width,e.height);for(let e=1;e0?n:0,e.y=o<0?o:s>0?s:0},computeVelocity(e){this.gravity&&(e.y+=this.gravity*me.timer.tick,this.falling=e.y*Math.sign(this.gravity)>0,this.jumping=!this.falling&&this.jumping),(this.friction.x||this.friction.y)&&this.applyFriction(e),0!==e.y&&(e.y=e.y.clamp(-this.maxVel.y,this.maxVel.y)),0!==e.x&&(e.x=e.x.clamp(-this.maxVel.x,this.maxVel.x))},update(){return this.computeVelocity(this.vel),this.ancestor.pos.add(this.vel),0!==this.vel.x||0!==this.vel.y},destroy(){this.onBodyUpdate=null,this.ancestor=null,this.shapes=[]}}),me.Body.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.Body.Error"}}),function(){const e=[],t=function(t,i,n,r){if(e.length>0){const o=e.pop();return o.bounds=t,o.max_objects=i||4,o.max_levels=n||4,o.level=r||0,o}return new me.QuadTree(t,i,n,r)},i=new me.Vector2d;function n(e,t,i,n){this.max_objects=t||4,this.max_levels=i||4,this.level=n||0,this.bounds=e,this.objects=[],this.nodes=[]}n.prototype.split=function(){let e=this.level+1,i=~~(.5+this.bounds.width/2),n=~~(.5+this.bounds.height/2),r=~~(.5+this.bounds.pos.x),o=~~(.5+this.bounds.pos.y);this.nodes[0]=t({pos:{x:r+i,y:o},width:i,height:n},this.max_objects,this.max_levels,e),this.nodes[1]=t({pos:{x:r,y:o},width:i,height:n},this.max_objects,this.max_levels,e),this.nodes[2]=t({pos:{x:r,y:o+n},width:i,height:n},this.max_objects,this.max_levels,e),this.nodes[3]=t({pos:{x:r+i,y:o+n},width:i,height:n},this.max_objects,this.max_levels,e)},n.prototype.getIndex=function(e){let t=e.getBounds(),n=t.pos;(e.floating||e.ancestor&&e.ancestor.floating)&&(n=me.game.viewport.localToWorld(n.x,n.y,i));let r=-1,o=n.x,s=n.y,a=t.width,h=t.height,l=this.bounds.pos.x+this.bounds.width/2,c=this.bounds.pos.y+this.bounds.height/2,u=sc;return ol&&(u?r=0:d&&(r=3)),r},n.prototype.insertContainer=function(e){for(var t,i=e.children.length;i--,t=e.children[i];)!0!==t.isKinematic&&(t instanceof me.Container?("rootContainer"!==t.name&&this.insert(t),this.insertContainer(t)):"function"==typeof t.getBounds&&this.insert(t))},n.prototype.insert=function(e){let t=-1;if(this.nodes.length>0&&-1!==(t=this.getIndex(e)))this.nodes[t].insert(e);else if(this.objects.push(e),this.objects.length>this.max_objects&&this.level0){const t=this.getIndex(e);if(-1!==t)i=i.concat(this.nodes[t].retrieve(e));else for(let t=0;t0){const i=this.getIndex(e);-1!==i&&(t=this.nodes[i].remove(e))&&this.nodes[i].isPrunable()&&this.nodes.splice(i,1)}return!1===t&&-1!==this.objects.indexOf(e)&&(this.objects.remove(e),t=!0),t},n.prototype.isPrunable=function(){return!(this.hasChildren()||this.objects.length>0)},n.prototype.hasChildren=function(){for(let e=0;e0||t.objects.length>0)return!0}return!1},n.prototype.clear=function(t){this.objects.length=0;for(let t=0;tr&&(r=o)}i[0]=n,i[1]=r}function a(e,t,i,o,a,h){const l=r.pop(),c=r.pop(),u=n.pop().copy(t).sub(e),d=u.dotProduct(a);if(s(i,a,l),s(o,a,c),c[0]+=d,c[1]+=d,l[0]>c[1]||c[0]>l[1])return n.push(u),r.push(l),r.push(c),!0;if(h){let e=0;if(l[0]c[1])e=l[0]-c[1],h.aInB=!1;else{const t=l[1]-c[0],i=c[1]-l[0];e=to?i:t}me.collision=function(){const t={quadTree:null,maxDepth:4,maxChildren:8,bounds:null,types:{NO_OBJECT:0,PLAYER_OBJECT:1,NPC_OBJECT:2,ENEMY_OBJECT:4,COLLECTABLE_OBJECT:8,ACTION_OBJECT:16,PROJECTILE_OBJECT:32,WORLD_SHAPE:64,USER:128,ALL_OBJECT:4294967295},init:function(){t.bounds=me.game.viewport.clone(),t.quadTree=new me.QuadTree(t.bounds,t.maxChildren,t.maxDepth),me.event.subscribe(me.event.LEVEL_LOADED,()=>{t.bounds=me.game.world.clone(),t.quadTree.clear(t.bounds)})},ResponseObject:function(){this.a=null,this.b=null,this.overlapN=new me.Vector2d,this.overlapV=new me.Vector2d,this.aInB=!0,this.bInA=!0,this.indexShapeA=-1,this.indexShapeB=-1,this.overlap=Number.MAX_VALUE}};return t.ResponseObject.prototype.clear=function(){return this.aInB=!0,this.bInA=!0,this.overlap=Number.MAX_VALUE,this.indexShapeA=-1,this.indexShapeB=-1,this},t.response=new t.ResponseObject,t.shouldCollide=function(e,t){return!0!==e.isKinematic&&!0!==t.isKinematic&&e.body&&t.body&&0!=(e.body.collisionMask&t.body.collisionType)&&0!=(e.body.collisionType&t.body.collisionMask)},t.check=function(e,i){let n=0;const r=i||t.response,o=t.quadTree.retrieve(e);for(var s,a=o.length;s=o[--a];)if(s!==e&&t.shouldCollide(e,s)&&e.getBounds().overlaps(s.getBounds())){const i=e.body.shapes.length,o=s.body.shapes.length;if(0===i||0===o)continue;let a=0;do{const i=e.body.getShape(a);let h=0;do{const o=s.body.getShape(h);!0===t[`test${i.shapeType}${o.shapeType}`].call(this,e,i,s,o,r.clear())&&(n++,r.indexShapeA=a,r.indexShapeB=h,e.onCollision&&!1!==e.onCollision(r,s)&&e.body.respondToCollision.call(e.body,r),s.onCollision&&!1!==s.onCollision(r,e)&&s.body.respondToCollision.call(s.body,r)),h++}while(h0},t.rayCast=function(e,i){let n=0;const r=i||[],s=t.quadTree.retrieve(e.getBounds());for(var a,h=s.length;a=s[--h];)if(a.body&&e.getBounds().overlaps(a.getBounds())){const i=a.body.shapes.length;if(0===a.body.shapes.length)continue;const s=e;let h=0;do{const e=a.body.getShape(h);t[`test${s.shapeType}${e.shapeType}`].call(this,o,s,a,e)&&(r[n]=a,n++),h++}while(hc)return n.push(s),!1;if(o){const t=Math.sqrt(u);o.a=e,o.b=i,o.overlap=l-t,o.overlapN.copy(s.normalize()),o.overlapV.copy(s).scale(o.overlap),o.aInB=a<=h&&t<=h-a,o.bInA=h<=a&&t<=a-h}return n.push(s),!0},t.testPolygonEllipse=function(t,r,o,s,a){const l=n.pop().copy(o.pos).add(o.ancestor._absPos).add(s.pos).sub(t.pos).add(t.ancestor._absPos).sub(r.pos),c=s.radius,u=c*c,d=r.points,p=r.edges,f=p.length,m=n.pop(),g=n.pop(),y=n.pop();let v=0;for(let t=0;tu&&(a.aInB=!1);let x=h(m,y),_=!0;if(x===e){let e=null;if(f>1&&(m.copy(p[s]),(x=h(m,e=n.pop().copy(l).sub(d[s])))!==i&&(_=!1)),_){if((v=y.length())>c)return n.push(l),n.push(m),n.push(g),n.push(y),e&&n.push(e),!1;a&&(a.bInA=!1,b=y.normalize(),w=c-v)}e&&n.push(e)}else if(x===i){if(f>1&&(m.copy(p[o]),y.copy(l).sub(d[o]),(x=h(m,y))!==e&&(_=!1)),_){if((v=y.length())>c)return n.push(l),n.push(m),n.push(g),n.push(y),!1;a&&(a.bInA=!1,b=y.normalize(),w=c-v)}}else{g.copy(r.normals[t]),v=y.dotProduct(g);const e=Math.abs(v);if((1===f||v>0)&&e>c)return n.push(l),n.push(m),n.push(g),n.push(y),!1;a&&(b=g,w=c-v,(v>=0||w<2*c)&&(a.bInA=!1))}b&&a&&Math.abs(w)!1,updateBoundsPos(e,t){const i=this.getBounds();return i.pos.set(e,t,i.pos.z),this.ancestor&&i.pos.add(this.ancestor._absPos),i},onAnchorUpdate(){},updateBounds(){return console.warn("Deprecated: me.Renderable.updateBounds"),me.Rect.prototype.updateBounds.apply(this)},preDraw(e){const t=this.getBounds();let i=t.width*this.anchorPoint.x,n=t.height*this.anchorPoint.y;e.save(),e.setGlobalAlpha(e.globalAlpha()*this.getOpacity()),!0!==this.autoTransform||this.currentTransform.isIdentity()?e.translate(-i,-n):(this.currentTransform.translate(-i,-n),e.transform(this.currentTransform),this.currentTransform.translate(i,n))},draw(){},postDraw(e){e.restore()},destroy(){this.currentTransform.identity(),void 0!==this.body&&(this.body.destroy.apply(this.body,arguments),this.body=void 0),this.onDestroyEvent.apply(this,arguments)},onDestroyEvent(){}}),Object.defineProperty(me.Renderable.prototype,"width",{get(){return this._width},set(e){this.getBounds().width=e,this._width=e},configurable:!0}),Object.defineProperty(me.Renderable.prototype,"height",{get(){return this._height},set(e){this.getBounds().height=e,this._height=e},configurable:!0}),me.Renderable.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.Renderable.Error"}}),me.ColorLayer=me.Renderable.extend({init(e,t,i){me.Renderable.prototype.init.apply(this,[0,0,1/0,1/0]),this.name=e,this.pos.z=i,this.floating=!0,t instanceof me.Color?this.color=t:this.color=me.pool.pull("me.Color").parseCSS(t),this.anchorPoint.set(0,0)},draw(e,t){const i=e.getColor(),n=me.game.viewport.pos;e.setColor(this.color),e.fillRect(t.left-n.x,t.top-n.y,t.width,t.height),e.setColor(i)}}),me.ImageLayer=me.Renderable.extend({init(e,t,i){if(this.name=i.name||"me.ImageLayer",this.image=me.utils.getImage(i.image),!this.image)throw new me.Error(`${"string"==typeof i.image?`'${i.image}'`:"Image"} file for Image Layer '${this.name}' not found!`);this.imagewidth=this.image.width,this.imageheight=this.image.height,me.Renderable.prototype.init.apply(this,[e,t,1/0,1/0]),this.floating=!0,this.pos.z=i.z||0,this.offset=new me.Vector2d(e,t),this.ratio=new me.Vector2d(1,1),void 0!==i.ratio&&("number"==typeof i.ratio?this.ratio.set(i.ratio,i.ratio):this.ratio.setV(i.ratio)),void 0===i.anchorPoint?this.anchorPoint.set(0,0):"number"==typeof i.anchorPoint?this.anchorPoint.set(i.anchorPoint,i.anchorPoint):this.anchorPoint.setV(i.anchorPoint),Object.defineProperty(this,"repeat",{get:function(){return this._repeat},set:function(e){switch(this._repeat=e,this._repeat){case"no-repeat":this.repeatX=!1,this.repeatY=!1;break;case"repeat-x":this.repeatX=!0,this.repeatY=!1;break;case"repeat-y":this.repeatX=!1,this.repeatY=!0;break;default:this.repeatX=!0,this.repeatY=!0}this.resize(me.game.viewport.width,me.game.viewport.height),this.createPattern()}}),this.repeat=i.repeat||"repeat"},onActivateEvent(){const e=this.updateLayer.bind(this);this.vpChangeHdlr=me.event.subscribe(me.event.VIEWPORT_ONCHANGE,e),this.vpResizeHdlr=me.event.subscribe(me.event.VIEWPORT_ONRESIZE,this.resize.bind(this)),this.vpLoadedHdlr=me.event.subscribe(me.event.LEVEL_LOADED,()=>{e(me.game.viewport.pos)}),!0!==this.ancestor._root&&this.updateLayer(me.game.viewport.pos)},resize(e,t){me.Renderable.prototype.resize.apply(this,[this.repeatX?1/0:e,this.repeatY?1/0:t])},createPattern(){this._pattern=me.video.renderer.createPattern(this.image,this._repeat)},updateLayer(e){let t=this.ratio.x,i=this.ratio.y;if(t===i===0)return;let n=me.game.viewport,r=this.imagewidth,o=this.imageheight,s=n.bounds.width,a=n.bounds.height,h=this.anchorPoint.x,l=this.anchorPoint.y,c=h*(t-1)*(s-n.width)+this.offset.x-t*e.x,u=l*(i-1)*(a-n.height)+this.offset.y-i*e.y;this.repeatX?this.pos.x=c%r:this.pos.x=c,this.repeatY?this.pos.y=u%o:this.pos.y=u},preDraw(e){e.save(),e.setGlobalAlpha(e.globalAlpha()*this.getOpacity())},draw(e){let t=me.game.viewport,i=this.imagewidth,n=this.imageheight,r=t.bounds.width,o=t.bounds.height,s=this.anchorPoint.x,a=this.anchorPoint.y,h=this.pos.x,l=this.pos.y;this.ratio.x===this.ratio.y===0&&(h+=s*(r-i),l+=a*(o-n)),e.translate(h,l),e.drawPattern(this._pattern,0,0,2*t.width,2*t.height)},onDeactivateEvent(){me.event.unsubscribe(this.vpChangeHdlr),me.event.unsubscribe(this.vpResizeHdlr),me.event.unsubscribe(this.vpLoadedHdlr)}}),me.Sprite=me.Renderable.extend({init(e,t,i){if(this.animationpause=!1,this.animationspeed=100,this.offset=new me.Vector2d,this.anim={},this.resetAnim=null,this.current={offset:new me.Vector2d,width:0,height:0,angle:0},this.dt=0,this._flicker={isFlickering:!1,duration:0,callback:null,state:!1},this.isSprite=!0,i.image instanceof me.CanvasRenderer.prototype.Texture){if(this.image=i.image.getTexture(),this.textureAtlas=i.image,void 0!==i.region){const e=i.image.getRegion(i.region);if(!e)throw new me.Renderable.Error(`Texture - region for ${i.region} not found`);this.setRegion(e),i.framewidth=i.framewidth||e.width,i.frameheight=i.frameheight||e.height}}else this.image=me.utils.getImage(i.image),i.framewidth=i.framewidth||this.image.width,i.frameheight=i.frameheight||this.image.height,this.textureAtlas=me.video.renderer.cache.get(this.image,i).getAtlas();this.current.width=i.framewidth,this.current.height=i.frameheight,void 0!==i.atlas?(this.textureAtlas=i.atlas,this.atlasIndices=i.atlasIndices):this.atlasIndices=null,me.Renderable.prototype.init.apply(this,[e,t,this.current.width,this.current.height]),void 0!==i.flipX&&this.flipX(!!i.flipX),void 0!==i.flipY&&this.flipY(!!i.flipY),void 0!==i.rotation&&this.currentTransform.rotate(i.rotation),i.anchorPoint&&this.anchorPoint.set(i.anchorPoint.x,i.anchorPoint.y),0!==this.addAnimation("default",null)&&this.setCurrentAnimation("default"),this.autoTransform=!0},isFlickering(){return this._flicker.isFlickering},flicker(e,t){this._flicker.duration=e,this._flicker.duration<=0?(this._flicker.isFlickering=!1,this._flicker.callback=null):this._flicker.isFlickering||(this._flicker.callback=t,this._flicker.isFlickering=!0)},addAnimation(e,t,i){this.anim[e]={name:e,frames:[],idx:0,length:0};let n=0;if("object"!=typeof this.textureAtlas)return 0;null==t&&(t=[],Object.keys(this.textureAtlas).forEach((e,i)=>{t[i]=i}));for(let o=0,s=t.length;o1){let i=this.getAnimationFrameObjectByIndex(this.current.idx).delay;for(this.dt+=e;this.dt>=i;){if(t=!0,this.dt-=i,this.setAnimationFrame(this.current.idx+1),0===this.current.idx&&this.resetAnim)if("string"==typeof this.resetAnim)this.setCurrentAnimation(this.resetAnim,null,!0);else if(!1===this.resetAnim()){this.setAnimationFrame(this.current.length-1),this.dt%=i;break}i=this.getAnimationFrameObjectByIndex(this.current.idx).delay}}return this._flicker.isFlickering&&(this._flicker.duration-=e,this._flicker.duration<0&&("function"==typeof this._flicker.callback&&this._flicker.callback(),this.flicker(-1)),t=!0),t},updateBoundsPos(e,t){const i=this.getBounds();return i.pos.set(e-this.anchorPoint.x*i.width,t-this.anchorPoint.y*i.height),this.ancestor&&i.pos.add(this.ancestor._absPos),i},onAnchorUpdate(e,t){this.anchorPoint.setMuted(e,t),this.updateBoundsPos(this.pos.x,this.pos.y)},draw(e){if(this._flicker.isFlickering&&(this._flicker.state=!this._flicker.state,!this._flicker.state))return;const t=this.current;let i=this.pos.x,n=this.pos.y,r=t.width,o=t.height;const s=t.offset,a=this.offset;0!==t.angle&&(e.translate(-i,-n),e.rotate(t.angle),i-=o,r=t.height,o=t.width),e.drawImage(this.image,a.x+s.x,a.y+s.y,r,o,i,n,r,o)}}),me.AnimationSheet=me.Sprite,function(){let e=Math.min,t=Math.max;me.Viewport=me.Renderable.extend({init(e,t,i,n){me.Renderable.prototype.init.apply(this,[e,t,i-e,n-t]),this.AXIS={NONE:0,HORIZONTAL:1,VERTICAL:2,BOTH:3},this.bounds=new me.Rect(-1/0,-1/0,1/0,1/0),this.offset=new me.Vector2d,this.target=null,this.follow_axis=this.AXIS.NONE,this._shake={intensity:0,duration:0,axis:this.AXIS.BOTH,onComplete:null},this._fadeOut={color:null,tween:null},this._fadeIn={color:null,tween:null},this.setDeadzone(this.width/6,this.height/6),this.anchorPoint.set(0,0),this.isKinematic=!1},_followH(i){const n=this.pos.x;return i.x-this.pos.x>this.deadzone.right?this.pos.x=e(i.x-this.deadzone.right,this.bounds.width-this.width):i.x-this.pos.xthis.deadzone.bottom?this.pos.y=e(i.y-this.deadzone.bottom,this.bounds.height-this.height):i.y-this.pos.y0&&(this._shake.duration-=e,this._shake.duration<=0?(this._shake.duration=0,this.offset.setZero(),"function"==typeof this._shake.onComplete&&this._shake.onComplete()):(this._shake.axis!==this.AXIS.BOTH&&this._shake.axis!==this.AXIS.HORIZONTAL||(this.offset.x=(Math.random()-.5)*this._shake.intensity),this._shake.axis!==this.AXIS.BOTH&&this._shake.axis!==this.AXIS.VERTICAL||(this.offset.y=(Math.random()-.5)*this._shake.intensity)),t=!0),!0===t&&me.event.publish(me.event.VIEWPORT_ONCHANGE,[this.pos]),null==this._fadeIn.tween&&null==this._fadeOut.tween||(t=!0),t},shake(e,t,i,n,r){0!==this._shake.duration&&!0!==r||(this._shake.intensity=e,this._shake.duration=t,this._shake.axis=i||this.AXIS.BOTH,this._shake.onComplete="function"==typeof n?n:void 0)},fadeOut(e,t,i){this._fadeOut.color=me.pool.pull("me.Color").copy(e),this._fadeOut.tween=me.pool.pull("me.Tween",this._fadeOut.color).to({alpha:0},t||1e3).onComplete(i||null),this._fadeOut.tween.isPersistent=!0,this._fadeOut.tween.start()},fadeIn(e,t,i){this._fadeIn.color=me.pool.pull("me.Color").copy(e);const n=this._fadeIn.color.alpha;this._fadeIn.color.alpha=0,this._fadeIn.tween=me.pool.pull("me.Tween",this._fadeIn.color).to({alpha:n},t||1e3).onComplete(i||null),this._fadeIn.tween.isPersistent=!0,this._fadeIn.tween.start()},getWidth(){return this.width},getHeight(){return this.height},focusOn(e){const t=e.getBounds();this.moveTo(e.pos.x+t.pos.x+t.width/2,e.pos.y+t.pos.y+t.height/2)},isVisible(e){return e.overlaps(this)},localToWorld(e,t,i){return(i=i||new me.Vector2d).set(e,t).add(this.pos).sub(me.game.world.pos),this.currentTransform.isIdentity()||this.currentTransform.multiplyVectorInverse(i),i},worldToLocal(e,t,i){return(i=i||new me.Vector2d).set(e,t),this.currentTransform.isIdentity()||this.currentTransform.multiplyVector(i),i.sub(this.pos).add(me.game.world.pos)},draw(e){this._fadeIn.tween&&(e.clearColor(this._fadeIn.color),1===this._fadeIn.color.alpha&&(this._fadeIn.tween=null,me.pool.push(this._fadeIn.color),this._fadeIn.color=null)),this._fadeOut.tween&&(e.clearColor(this._fadeOut.color),0===this._fadeOut.color.alpha&&(this._fadeOut.tween=null,me.pool.push(this._fadeOut.color),this._fadeOut.color=null))}})}(),me.GUI_Object=me.Sprite.extend({init(e,t,i){this.isClickable=!0,this.holdThreshold=250,this.isHoldable=!1,this.hover=!1,this.holdTimeout=null,this.updated=!1,this.released=!0,me.Sprite.prototype.init.apply(this,[e,t,i]),this.floating=!0,this.isKinematic=!1},update(){return!!this.updated&&(this.released||(this.updated=!1),!0)},clicked(e){if(0===e.button&&this.isClickable)return this.updated=!0,this.released=!1,this.isHoldable&&(null!==this.holdTimeout&&me.timer.clearTimeout(this.holdTimeout),this.holdTimeout=me.timer.setTimeout(this.hold.bind(this),this.holdThreshold,!1),this.released=!1),this.onClick(e)},onClick:()=>!1,enter(e){return this.hover=!0,this.onOver(e)},onOver(){},leave(e){return this.hover=!1,this.release.call(this,e),this.onOut(e)},onOut(){},release(e){if(!1===this.released)return this.released=!0,me.timer.clearTimeout(this.holdTimeout),this.onRelease(e)},onRelease:()=>!1,hold(){me.timer.clearTimeout(this.holdTimeout),this.released||this.onHold()},onHold(){},onActivateEvent(){me.input.registerPointerEvent("pointerdown",this,this.clicked.bind(this)),me.input.registerPointerEvent("pointerup",this,this.release.bind(this)),me.input.registerPointerEvent("pointercancel",this,this.release.bind(this)),me.input.registerPointerEvent("pointerenter",this,this.enter.bind(this)),me.input.registerPointerEvent("pointerleave",this,this.leave.bind(this))},onDeactivateEvent(){me.input.releasePointerEvent("pointerdown",this),me.input.releasePointerEvent("pointerup",this),me.input.releasePointerEvent("pointercancel",this),me.input.releasePointerEvent("pointerenter",this),me.input.releasePointerEvent("pointerleave",this),me.timer.clearTimeout(this.holdTimeout)}}),function(){let e=0;me.Container=me.Renderable.extend({init(e,t,i,n){this.pendingSort=null,this._root=!1,me.Renderable.prototype.init.apply(this,[e||0,t||0,i||1/0,n||1/0]),this.children=[],this.sortOn=me.game.sortOn,this.autoSort=!0,this.autoDepth=!0,this.onChildChange=function(){},this.drawCount=0,this.childBounds=this.getBounds().clone(),this.autoTransform=!0,this.isKinematic=!1},addChild(e,t){return e.ancestor instanceof me.Container?e.ancestor.removeChildNow(e):e.isRenderable&&(e.GUID=me.utils.createGUID(e.id)),e.ancestor=this,this.children.push(e),void 0!==e.pos&&("number"==typeof t?e.pos.z=t:!0===this.autoDepth&&(e.pos.z=this.children.length)),!0===this.autoSort&&this.sort(),"function"==typeof e.onActivateEvent&&this.isAttachedToRoot()&&e.onActivateEvent(),this.onChildChange.call(this,this.children.length-1),e},addChildAt(e,t){if(t>=0&&t1&&(i=t);n=0&&e=0;r--){const o=this.children[r];n(o,e),o instanceof me.Container&&(i=i.concat(o.getChildByProp(e,t)))}return i},getChildByType(e){let t=[];for(let i=this.children.length-1;i>=0;i--){const n=this.children[i];n instanceof e&&t.push(n),n instanceof me.Container&&(t=t.concat(n.getChildByType(e)))}return t},getChildByName(e){return this.getChildByProp("name",e)},getChildByGUID(e){const t=this.getChildByProp("GUID",e);return t.length>0?t[0]:null},updateChildBounds(){let e;this.childBounds.pos.set(1/0,1/0),this.childBounds.resize(-1/0,-1/0);for(var t,i=this.children.length;i--,t=this.children[i];)t.isRenderable&&null!==(e=t instanceof me.Container?t.childBounds:t.getBounds())&&this.childBounds.union(e);return this.childBounds},isAttachedToRoot(){if(this._root)return!0;let e=this.ancestor;for(;e;){if(!0===e._root)return!0;e=e.ancestor}return!1},updateBoundsPos(e,t){me.Renderable.prototype.updateBoundsPos.apply(this,[e,t]),this._absPos.set(e,t),this.ancestor&&this._absPos.add(this.ancestor._absPos);for(var i,n=this.children.length;n--,i=this.children[n];)i.isRenderable&&i.updateBoundsPos(i.pos.x,i.pos.y);return this.getBounds()},onActivateEvent(){for(var e,t=this.children.length;t--,e=this.children[t];)"function"==typeof e.onActivateEvent&&e.onActivateEvent()},removeChild(e,t){if(!this.hasChild(e))throw new me.Container.Error("Child is not mine.");(function(e,t){this.removeChildNow(e,t)}).defer(this,e,t)},removeChildNow(e,t){if(this.hasChild(e)&&this.getChildIndex(e)>=0){"function"==typeof e.onDeactivateEvent&&e.onDeactivateEvent(),t||("function"==typeof e.destroy&&e.destroy(),me.pool.push(e));const i=this.getChildIndex(e);i>=0&&(this.children.splice(i,1),e.ancestor=void 0),this.onChildChange.call(this,i)}},setChildsProperty(e,t,i){for(let n=this.children.length;n>=0;n--){const r=this.children[n];!0===i&&r instanceof me.Container&&r.setChildsProperty(e,t,i),r[e]=t}},moveUp(e){const t=this.getChildIndex(e);t-1>=0&&this.swapChildren(e,this.getChildAt(t-1))},moveDown(e){const t=this.getChildIndex(e);t>=0&&t+10&&(this.children.splice(0,0,this.children.splice(t,1)[0]),e.pos.z=this.children[1].pos.z+1)},moveToBottom(e){const t=this.getChildIndex(e);t>=0&&tt.pos&&e.pos?t.pos.z-e.pos.z:e.pos?-1/0:1/0,_sortReverseZ:(e,t)=>e.pos&&t.pos?e.pos.z-t.pos.z:e.pos?1/0:-1/0,_sortX(e,t){if(!t.pos||!e.pos)return e.pos?-1/0:1/0;return t.pos.z-e.pos.z||t.pos.x-e.pos.x},_sortY(e,t){if(!t.pos||!e.pos)return e.pos?-1/0:1/0;return t.pos.z-e.pos.z||t.pos.y-e.pos.y},destroy(){this.pendingSort&&(clearTimeout(this.pendingSort),this.pendingSort=null);for(var e,t=this.children.length;t>=0;e=this.children[--t])e&&!e.isPersistent&&this.removeChildNow(e);me.Renderable.prototype.destroy.apply(this,arguments)},update(t){me.Renderable.prototype.update.apply(this,[t]);let i=!1,n=!1;const r=me.state.isPaused(),o=me.game.viewport;this._absPos.setV(this.pos),this.ancestor&&this._absPos.add(this.ancestor._absPos);for(var s,a=this.children.length;a--,s=this.children[a];)r&&!s.updateWhenPaused||(s.isRenderable?((n=e>0||s.floating)&&e++,s.inViewport=n||o.isVisible(s.getBounds()),i=(s.inViewport||s.alwaysUpdate)&&s.update(t)||i,s._absPos.setV(this._absPos).add(s.pos),e>0&&e--):i=s.update(t)||i);return i},draw(e,t){let i=!1;this.drawCount=0,e.translate(this.pos.x,this.pos.y);for(var n,r=this.children.length;r--,n=this.children[r];)n.isRenderable&&(i=!0===n.floating,(n.inViewport||i)&&(i&&(e.save(),e.resetTransform()),n.preDraw(e),n.draw(e,t),n.postDraw(e),i&&e.restore(),this.drawCount++))}}),me.Container.Error=me.Renderable.Error.extend({init(e){me.Renderable.Error.prototype.init.apply(this,[e]),this.name="me.Container.Error"}})}(),me.Entity=me.Renderable.extend({init(e,t,i){if(this.children=[],"number"!=typeof i.width||"number"!=typeof i.height)throw new me.Entity.Error("height and width properties are mandatory when passing settings parameters to an object entity");me.Renderable.prototype.init.apply(this,[e,t,i.width,i.height]),i.image&&(this.renderable=new me.Sprite(0,0,{image:i.image,framewidth:~~(i.framewidth||i.width),frameheight:~~(i.frameheight||i.height),spacing:~~i.spacing,margin:~~i.margin,anchorPoint:i.anchorPoint})),i.anchorPoint&&this.anchorPoint.set(i.anchorPoint.x,i.anchorPoint.y),this.name=i.name||"",this.type=i.type||"",this.id=i.id||"",this.alive=!0;const n=Array.isArray(i.shapes)?i.shapes:[new me.Rect(0,0,this.width,this.height)];if(void 0!==this.body?this.body.init(this,n,this.onBodyUpdate.bind(this)):this.body=new me.Body(this,n,this.onBodyUpdate.bind(this)),0===this.width&&0===this.height&&this.resize(this.body.width,this.body.height),void 0!==i.collisionMask&&this.body.setCollisionMask(i.collisionMask),void 0!==i.collisionType){if(void 0===me.collision.types[i.collisionType])throw new me.Entity.Error("Invalid value for the collisionType property");this.body.collisionType=me.collision.types[i.collisionType]}this.autoTransform=!1,this.isKinematic=!1},distanceTo(e){const t=this.getBounds(),i=e.getBounds(),n=t.pos.x+t.width/2-(i.pos.x+i.width/2),r=t.pos.y+t.height/2-(i.pos.y+i.height/2);return Math.sqrt(n*n+r*r)},distanceToPoint(e){const t=this.getBounds(),i=t.pos.x+t.width/2-e.x,n=t.pos.y+t.height/2-e.y;return Math.sqrt(i*i+n*n)},angleTo(e){const t=this.getBounds(),i=e.getBounds(),n=i.pos.x+i.width/2-(t.pos.x+t.width/2),r=i.pos.y+i.height/2-(t.pos.y+t.height/2);return Math.atan2(r,n)},angleToPoint(e){const t=this.getBounds(),i=e.x-(t.pos.x+t.width/2),n=e.y-(t.pos.y+t.height/2);return Math.atan2(n,i)},update(e){return this.renderable?this.renderable.update(e):me.Renderable.prototype.update.apply(this,[e])},updateBoundsPos(e,t){if(void 0!==this.body){const i=this.body.pos;me.Renderable.prototype.updateBoundsPos.apply(this,[e+i.x,t+i.y])}else me.Renderable.prototype.updateBoundsPos.apply(this,[e,t]);return this.getBounds()},onBodyUpdate(e){this.getBounds().resize(e.width,e.height),this.updateBoundsPos(this.pos.x,this.pos.y)},preDraw(e){e.save(),e.translate(this.pos.x+this.body.pos.x,this.pos.y+this.body.pos.y),this.renderable instanceof me.Renderable&&e.translate(this.anchorPoint.x*this.body.width,this.anchorPoint.y*this.body.height)},draw(e,t){const i=this.renderable;i instanceof me.Renderable&&(i.preDraw(e),i.draw(e,t),i.postDraw(e))},destroy(){this.renderable&&(this.renderable.destroy.apply(this.renderable,arguments),this.children.splice(0,1)),me.Renderable.prototype.destroy.apply(this,arguments)},onDeactivateEvent(){this.renderable&&this.renderable.onDeactivateEvent&&this.renderable.onDeactivateEvent()},onCollision:()=>!1}),Object.defineProperty(me.Entity.prototype,"renderable",{get(){return this.children[0]},set(e){if(!(e instanceof me.Renderable))throw new me.Entity.Error(`${e}should extend me.Renderable`);this.children[0]=e},configurable:!0}),me.Entity.Error=me.Renderable.Error.extend({init(e){me.Renderable.Error.prototype.init.apply(this,[e]),this.name="me.Entity.Error"}}),me.ScreenObject=me.Object.extend({init(){},reset(){me.game.reset(),this.onResetEvent.apply(this,arguments)},destroy(){this.onDestroyEvent.apply(this,arguments)},onResetEvent(){},onDestroyEvent(){}}),me.state=function(){const e={};let t=-1,i=-1,n=!1;const r={},o={color:"",duration:0};let s=null,a=null,h=0;function l(){-1===i&&-1!==t&&(me.timer.reset(),i=window.requestAnimationFrame(c))}function c(e){me.game.update(e),me.game.draw(),-1!==i&&(i=window.requestAnimationFrame(c))}function u(){window.cancelAnimationFrame(i),i=-1}function d(e){u(),r[t]&&r[t].screen.destroy(),r[e]&&(r[t=e].screen.reset.apply(r[t].screen,a),l(),s&&s(),me.game.repaint())}return e.LOADING=0,e.MENU=1,e.READY=2,e.PLAY=3,e.GAMEOVER=4,e.GAME_END=5,e.SCORE=6,e.CREDITS=7,e.SETTINGS=8,e.USER=100,e.onPause=null,e.onResume=null,e.onStop=null,e.onRestart=null,e.init=function(){e.set(e.LOADING,new me.DefaultLoadingScreen)},e.stop=function(i){t!==e.LOADING&&e.isRunning()&&(u(),!0===i&&me.audio.pauseTrack(),h=window.performance.now(),me.event.publish(me.event.STATE_STOP),"function"==typeof e.onStop&&e.onStop())},e.pause=function(i){t===e.LOADING||e.isPaused()||(n=!0,!0===i&&me.audio.pauseTrack(),h=window.performance.now(),me.event.publish(me.event.STATE_PAUSE),"function"==typeof e.onPause&&e.onPause())},e.restart=function(t){e.isRunning()||(l(),!0===t&&me.audio.resumeTrack(),h=window.performance.now()-h,me.game.repaint(),me.event.publish(me.event.STATE_RESTART,[h]),"function"==typeof e.onRestart&&e.onRestart())},e.resume=function(i){e.isPaused()&&(n&&-1!==t&&(me.timer.reset(),n=!1),!0===i&&me.audio.resumeTrack(),h=window.performance.now()-h,me.event.publish(me.event.STATE_RESUME,[h]),"function"==typeof e.onResume&&e.onResume())},e.isRunning=function(){return-1!==i},e.isPaused=function(){return n},e.set=function(e,t){if(!(t instanceof me.ScreenObject))throw new me.Error(`${t} is not an instance of me.ScreenObject`);r[e]={},r[e].screen=t,r[e].transition=!0},e.current=function(){return r[t].screen},e.transition=function(e,t,i){"fade"===e&&(o.color=t,o.duration=i)},e.setTransition=function(e,t){r[e].transition=t},e.change=function(t){if(void 0===r[t])throw new me.Error(`Undefined ScreenObject for state '${t}'`);e.isCurrent(t)||(a=null,arguments.length>1&&(a=Array.prototype.slice.call(arguments,1)),o.duration&&r[t].transition?(s=function(){me.game.viewport.fadeOut(o.color,o.duration)},me.game.viewport.fadeIn(o.color,o.duration,function(){d.defer(this,t)})):d.defer(this,t))},e.isCurrent=function(e){return t===e},e}(),function(){const e=me.Renderable.extend({init(e,t,i,n){me.Renderable.prototype.init.apply(this,[e,t,i,n]),this.invalidate=!1,this.progress=0,this.anchorPoint.set(0,0)},onProgressUpdate(e){this.progress=~~(e*this.width),this.invalidate=!0},update(){return!0===this.invalidate&&(this.invalidate=!1,!0)},draw(e){const t=e.getColor(),i=e.getHeight();e.setColor("black"),e.fillRect(this.pos.x,i/2,this.width,this.height/2),e.setColor("#55aa00"),e.fillRect(this.pos.x,i/2,this.progress,this.height/2),e.setColor(t)}}),t=me.Renderable.extend({init(e,t){me.Renderable.prototype.init.apply(this,[e,t,100,85]),this.iconCanvas=me.video.createCanvas(me.utils.nextPowerOfTwo(this.width),me.utils.nextPowerOfTwo(this.height),!1);const i=me.video.renderer.getContext2d(this.iconCanvas);i.beginPath(),i.moveTo(.7,48.9),i.bezierCurveTo(10.8,68.9,38.4,75.8,62.2,64.5),i.bezierCurveTo(86.1,53.1,97.2,27.7,87,7.7),i.lineTo(87,7.7),i.bezierCurveTo(89.9,15.4,73.9,30.2,50.5,41.4),i.bezierCurveTo(27.1,52.5,5.2,55.8,.7,48.9),i.lineTo(.7,48.9),i.closePath(),i.fillStyle="rgb(255, 255, 255)",i.fill(),i.beginPath(),i.moveTo(84,7),i.bezierCurveTo(87.6,14.7,72.5,30.2,50.2,41.6),i.bezierCurveTo(27.9,53,6.9,55.9,3.2,48.2),i.bezierCurveTo(-.5,40.4,14.6,24.9,36.9,13.5),i.bezierCurveTo(59.2,2.2,80.3,-.8,84,7),i.lineTo(84,7),i.closePath(),i.lineWidth=5.3,i.strokeStyle="rgb(255, 255, 255)",i.lineJoin="miter",i.miterLimit=4,i.stroke(),this.anchorPoint.set(.5,.5)},draw(e){e.drawImage(this.iconCanvas,this.pos.x,this.pos.y)}}),i=me.Renderable.extend({init(e,t){me.Renderable.prototype.init.apply(this,[0,0,e,t]),this.fontCanvas=me.video.createCanvas(256,64),this.drawFont(me.video.renderer.getContext2d(this.fontCanvas)),this.anchorPoint.set(0,0)},drawFont(e){const t=new me.Font("century gothic",32,"white","middle"),i=new me.Font("century gothic",32,"#55aa00","middle");let n=0;i.bold(),t.textBaseline=i.textBaseline="top",e.font=t.font,e.fillStyle=t.fillStyle.toRGBA(),e.textAlign=t.textAlign,e.textBaseline=t.textBaseline,n=e.measureText("melon").width,this.pos.x=Math.round((this.width-n-e.measureText("JS").width)/2),this.pos.y=this.height/2+16,t._drawFont(e,"melon",0,0),i._drawFont(e,"JS",n,0)},draw(e){e.drawImage(this.fontCanvas,this.pos.x,this.pos.y)}});me.DefaultLoadingScreen=me.ScreenObject.extend({onResetEvent(){me.game.world.addChild(new me.ColorLayer("background","#202020",0),0);const n=new e(0,me.video.renderer.getHeight()/2,me.video.renderer.getWidth(),8);this.loaderHdlr=me.event.subscribe(me.event.LOADER_PROGRESS,n.onProgressUpdate.bind(n)),this.resizeHdlr=me.event.subscribe(me.event.VIEWPORT_ONRESIZE,n.resize.bind(n)),me.game.world.addChild(n,1);const r=new t(me.video.renderer.getWidth()/2,me.video.renderer.getHeight()/2-n.height-35);me.game.world.addChild(r,1),me.game.world.addChild(new i(me.video.renderer.getWidth(),me.video.renderer.getHeight()),1)},onDestroyEvent(){me.event.unsubscribe(this.loaderHdlr),me.event.unsubscribe(this.resizeHdlr),this.loaderHdlr=this.resizeHdlr=null}})}(),me.loader=function(){const e={},t={},i={},n={},r={},o={};let s=0,a=0,h=0;return e.nocache="",e.onload=void 0,e.onProgress=void 0,e.crossOrigin=void 0,e.withCredentials=!1,e.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.loader.Error"}}),e.onResourceLoaded=function(t){a++;const i=e.getLoadProgress();e.onProgress&&e.onProgress(i,t),me.event.publish(me.event.LOADER_PROGRESS,[i,t])},e.onLoadingError=function(t){throw new e.Error(`Failed loading resource ${t.src}`)},e.setNocache=function(t){e.nocache=t?`?${~~(1e7*Math.random())}`:""},e.setBaseURL=function(e,t){"*"!==e?o[e]=t:(o.audio=t,o.binary=t,o.image=t,o.json=t,o.tmx=t,o.tsx=t)},e.preload=function(t,i,n){for(let i=0;i{t(),me.event.publish(me.event.LOADER_COMPLETE)},300)}else console.error("no load callback defined");else h=setTimeout(()=>{t(i)},100)}(i)},e.load=function(s,a,h){switch(void 0!==o[s.type]&&(s.src=o[s.type]+s.src),s.type){case"binary":return function(t,i,r){const o=new XMLHttpRequest;o.open("GET",t.src+e.nocache,!0),o.withCredentials=me.loader.withCredentials,o.responseType="arraybuffer",o.onerror=r,o.onload=function(){const e=o.response;if(e){const r=new Uint8Array(e),o=[];for(let e=0;e(e=e.trim(),/(^".*"$)|(^'.*'$)/.test(e)?e:`"${e}"`));if("number"==typeof n)this.fontSize.y=n,n+="px";else{const i=n.match(/([-+]?[\d.]*)(.*)/);this.fontSize.y=parseFloat(i[1]),i[2]?this.fontSize.y*=t[e.indexOf(i[2])]:n+="px"}this.height=this.fontSize.y,this.font=`${n} ${s.join(",")}`,void 0!==r&&this.fillStyle.copy(r),o&&(this.textAlign=o)},measureText(e,t){const i=e.getFontContext();i.font=this.font,i.fillStyle=this.fillStyle.toRGBA(),i.textAlign=this.textAlign,i.textBaseline=this.textBaseline,this.height=this.width=0;const n=`${t}`.split("\n");for(let e=0;e32)return this.glyphs[e[t]];return null},_getValueFromPair(e,t){const i=e.match(t);if(!i)throw`Could not find pattern ${t} in string: ${e}`;return i[0].split("=")[1]},parse(e){if(!e)throw"File containing font data was empty, cannot load the bitmap font.";const t=e.split(/\r\n|\n/),i=e.match(/padding\=\d+,\d+,\d+,\d+/g);if(!i)throw"Padding not found in first line";const n=i[0].split("=")[1].split(",");this.padTop=parseFloat(n[0]),this.padLeft=parseFloat(n[1]),this.padBottom=parseFloat(n[2]),this.padRight=parseFloat(n[3]),this.lineHeight=parseFloat(this._getValueFromPair(t[1],/lineHeight\=\d+/g));const r=parseFloat(this._getValueFromPair(t[1],/base\=\d+/g)),o=this.padTop+this.padBottom;let s=null;for(var a=4;a0&&s.height>0&&(this.descent=Math.min(r+s.yoffset,this.descent)),this.glyphs[e]=s}}this.descent+=this.padBottom,this._createSpaceGlyph();let h=null;for(a=0;a>>9];if(t)return t[511&e]||0}return 0},setKerning(e,t){this.kerning||(this.kerning={});let i=this.kerning[e>>>9];void 0===i&&(this.kerning[e>>>9]={},i=this.kerning[e>>>9]),i[511&e]=t}}),me.audio=function(){const e={},t={};let i=null,n=0;return e.init=function(e){if(!me.initialized)throw new me.audio.Error("me.audio.init() called before engine initialization.");return e="string"==typeof e?e:"mp3",this.audioFormats=e.split(","),!Howler.noAudio},e.enable=function(){this.unmuteAll()},e.disable=function(){this.muteAll()},e.load=function(e,i,r,o){const s=[];if(void 0===this.audioFormats||0===this.audioFormats.length)throw new me.audio.Error("target audio extension(s) should be set through me.audio.init() before calling the preloader.");for(let t=0;t3){const t=`melonJS: failed loading ${e}`;if(!1!==me.sys.stopOnAudioError)throw new me.audio.Error(t);me.audio.disable(),i&&i(),console.log(`${t}, disabling audio`)}else t[e].load()}).call(me.audio,e.name,o)},onload(){n=0,r&&r()}}),1},e.play=function(e,i,n,r){const o=t[e];if(o&&void 0!==o){const e=o.play();return"boolean"==typeof i&&o.loop(i,e),o.volume("number"==typeof r?r.clamp(0,1):Howler.volume(),e),"function"==typeof n&&(!0===i?o.on("end",n,e):o.once("end",n,e)),e}throw new me.audio.Error(`audio clip ${e} does not exist`)},e.fade=function(e,i,n,r,o){const s=t[e];if(!s||void 0===s)throw new me.audio.Error(`audio clip ${e} does not exist`);s.fade(i,n,r,o)},e.seek=function(e,i,n){const r=t[e];if(r&&void 0!==r)return r.seek(...Array.prototype.slice.call(arguments,1));throw new me.audio.Error(`audio clip ${e} does not exist`)},e.rate=function(e,i,n){const r=t[e];if(r&&void 0!==r)return r.rate(...Array.prototype.slice.call(arguments,1));throw new me.audio.Error(`audio clip ${e} does not exist`)},e.stop=function(e,i){const n=t[e];if(!n||void 0===n)throw new me.audio.Error(`audio clip ${e} does not exist`);n.stop(i),n.off("end",void 0,i)},e.pause=function(e,i){const n=t[e];if(!n||void 0===n)throw new me.audio.Error(`audio clip ${e} does not exist`);n.pause(i)},e.resume=function(e,i){const n=t[e];if(!n||void 0===n)throw new me.audio.Error(`audio clip ${e} does not exist`);n.play(i)},e.playTrack=function(e,t){return i=e,me.audio.play(i,!0,null,t)},e.stopTrack=function(){null!==i&&(t[i].stop(),i=null)},e.pauseTrack=function(){null!==i&&t[i].pause()},e.resumeTrack=function(){null!==i&&t[i].play()},e.getCurrentTrack=function(){return i},e.setVolume=function(e){Howler.volume(e)},e.getVolume=function(){return Howler.volume()},e.mute=function(e,i,n){n=void 0===n||!!n;const r=t[e];if(!r||void 0===r)throw new me.audio.Error(`audio clip ${e} does not exist`);r.mute(n,i)},e.unmute=function(t,i){e.mute(t,i,!1)},e.muteAll=function(){Howler.mute(!0)},e.unmuteAll=function(){Howler.mute(!1)},e.muted=function(){return Howler._muted},e.unload=function(e){return e in t&&(t[e].unload(),"function"==typeof t[e].dispose&&t[e].dispose(),delete t[e],!0)},e.unloadAll=function(){for(const i in t)t.hasOwnProperty(i)&&e.unload(i)},e}(),me.audio.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.audio.Error"}}),me.video=function(){const e={};let t=null,i=0,n=1,r=0,o=0,s=1/0,a=1/0,h={wrapper:void 0,renderer:0,doubleBuffering:!1,autoScale:!1,scale:1,scaleMethod:"fit",transparent:!1,antiAlias:!1,subPixel:!1,verbose:!1};return e.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.video.Error"}}),e._canvasOffset=null,e.CANVAS=0,e.WEBGL=1,e.AUTO=2,e.init=function(i,s,a){if(!me.initialized)throw new e.Error("me.video.init() called before engine initialization.");(h=Object.assign(h,a||{})).doubleBuffering=!!h.doubleBuffering,h.useParentDOMSize=!!h.useParentDOMSize,h.autoScale="auto"===h.scale||!1,0!==h.scaleMethod.search(/^(fill-(min|max)|fit|flex(-(width|height))?|stretch)$/)&&(h.scaleMethod="fit"),h.transparent=!!h.transparent,!0===me.game.HASH.webgl&&(h.renderer=e.WEBGL),h.scale=h.autoScale?1:+h.scale||1,me.sys.scale=new me.Vector2d(h.scale,h.scale),(h.autoScale||1!==h.scale)&&(h.doubleBuffering=!0),n=i/s,r=i,o=s;const l=i*me.sys.scale.x,c=s*me.sys.scale.y;if(h.zoomX=l,h.zoomY=c,window.addEventListener("resize",throttle(100,!1,e=>{me.event.publish(me.event.WINDOW_ONRESIZE,[e])}),!1),window.addEventListener("orientationchange",e=>{me.event.publish(me.event.WINDOW_ONORIENTATION_CHANGE,[e])},!1),window.addEventListener("onmozorientationchange",e=>{me.event.publish(me.event.WINDOW_ONORIENTATION_CHANGE,[e])},!1),void 0!==window.screen&&(window.screen.onorientationchange=function(e){me.event.publish(me.event.WINDOW_ONORIENTATION_CHANGE,[e])}),window.addEventListener("scroll",throttle(100,!1,t=>{e._canvasOffset=null,me.event.publish(me.event.WINDOW_ONSCROLL,[t])}),!1),me.event.subscribe(me.event.WINDOW_ONRESIZE,me.video.onresize.bind(me.video)),me.event.subscribe(me.event.WINDOW_ONORIENTATION_CHANGE,me.video.onresize.bind(me.video)),t=!0===me.device.ejecta?document.getElementById("canvas"):e.createCanvas(l,c,!0),a.wrapper&&(h.wrapper=document.getElementById(a.wrapper)),h.wrapper||(h.wrapper=document.body),h.wrapper.appendChild(t),!t.getContext)return!1;switch(h.renderer){case e.WEBGL:this.renderer=new me.WebGLRenderer(t,i,s,h);break;case e.AUTO:this.renderer=function(e,t,i,n){try{return new me.WebGLRenderer(e,t,i,n)}catch(r){return new me.CanvasRenderer(e,t,i,n)}}(t,i,s,h);break;default:this.renderer=new me.CanvasRenderer(t,i,s,h)}const u=me.device.getPixelRatio();if(u>1&&(t.style.width=`${t.width/u}px`,t.style.height=`${t.height/u}px`),window.getComputedStyle){const e=window.getComputedStyle(t,null);me.video.setMaxSize(parseInt(e.maxWidth,10),parseInt(e.maxHeight,10))}return me.game.init(),me.video.onresize(),!0},e.getPos=function(t){return void 0===t?(null===e._canvasOffset&&(t=this.renderer.getScreenCanvas(),e._canvasOffset=t&&t.getBoundingClientRect?t.getBoundingClientRect():{left:0,top:0}),e._canvasOffset):t.getBoundingClientRect?t.getBoundingClientRect():{left:0,top:0}},e.setMaxSize=function(e,t){s=e||1/0,a=t||1/0,this.onresize.defer(this)},e.createCanvas=function(i,n,r){if(0===i||0===n)throw new e.Error("width or height was zero, Canvas could not be initialized !");const o=document.createElement("canvas");return!0===r&&me.device.cocoon&&!0!==me.device.android2&&(o.screencanvas=!0),o.width=i||t.width,o.height=n||t.height,o},e.getWrapper=function(){return h.wrapper},e.onresize=function(){let t=1,l=1;if(e._canvasOffset=null,h.autoScale){let e,c;const u=me.video.renderer.getScreenCanvas().parentNode;if(void 0!==u)if(h.useParentDOMSize&&"function"==typeof u.getBoundingClientRect){const t=u.getBoundingClientRect();e=t.width||t.right-t.left,c=t.height||t.bottom-t.top}else e=u.width,c=u.height;const d=Math.min(s,e||window.innerWidth),p=Math.min(a,c||window.innerHeight),f=d/p;let m=1/0,g=1/0;"fill-min"===h.scaleMethod&&f>n||"fill-max"===h.scaleMethod&&fn||"flex-height"===h.scaleMethod?(t=l=p/(g=Math.min(a,r*(p/d))),g=~~(g+.5),this.renderer.resize(r,g),me.game.viewport.resize(r,g),me.game.world.updateChildBounds()):"flex"===h.scaleMethod?(this.renderer.resize(d,p),me.game.viewport.resize(d,p),me.game.world.updateChildBounds()):"stretch"===h.scaleMethod?(t=d/r,l=p/o):t=l=f>>3;o[s]=e,o[s+1]=e,o[s+2]=e}break;case"brightness":var h=Math.abs(i).clamp(0,1);for(s=0,a=o.length;s=this.max_size)throw new me.video.Error(`Texture cache overflow: ${this.max_size} texture units available.`)},get(e,t){return this.cache.has(e)||(t||(t=me.video.renderer.Texture.prototype.createAtlas.apply(me.video.renderer.Texture.prototype,[e.width,e.height,e.src?me.utils.getBasename(e.src):void 0])),this.put(e,new me.video.renderer.Texture(t,e,!1))),this.cache.get(e)},put(e,t){this.validate(),this.cache.set(e,t),this.units.set(t,this.length++)},getUnit(e){return this.units.get(e)}}),me.CanvasRenderer=me.Renderer.extend({init(e,t,i,n){return me.Renderer.prototype.init.apply(this,[e,t,i,n]),this.context=this.getContext2d(this.canvas,!this.transparent),this.doubleBuffering?(this.backBufferCanvas=me.video.createCanvas(t,i,!1),this.backBufferContext2D=this.getContext2d(this.backBufferCanvas),this.transparent&&(this.context.globalCompositeOperation="copy")):(this.backBufferCanvas=this.canvas,this.backBufferContext2D=this.context),this.setColor(this.currentColor),this.cache=new me.Renderer.TextureCache,!1===n.textureSeamFix||this.antiAlias||(this.uvOffset=1),this},clear(){this.transparent&&this.clearColor("rgba(0,0,0,0)",!0)},flush(){this.doubleBuffering&&this.context.drawImage(this.backBufferCanvas,0,0,this.backBufferCanvas.width,this.backBufferCanvas.height,0,0,this.gameWidthZoom,this.gameHeightZoom)},clearColor(e,t){const i=this.backBufferContext2D,n=i.canvas;i.save(),i.setTransform(1,0,0,1,0,0),i.globalCompositeOperation=t?"copy":"source-over",i.fillStyle=e instanceof me.Color?e.toRGBA():e,i.fillRect(0,0,n.width,n.height),i.restore()},clearRect(e,t,i,n){this.backBufferContext2D.clearRect(e,t,i,n)},createPattern(e,t){return this.backBufferContext2D.createPattern(e,t)},drawImage(e,t,i,n,r,o,s,a,h){this.backBufferContext2D.globalAlpha<1/255||(!1===this.subPixel?(void 0===n?(n=a=e.width,r=h=e.height,o=t,s=i,t=0,i=0):void 0===o&&(o=t,s=i,a=n,h=r,n=e.width,r=e.height,t=0,i=0),this.backBufferContext2D.drawImage(e,t,i,n,r,~~o,~~s,a,h)):this.backBufferContext2D.drawImage.apply(this.backBufferContext2D,arguments))},drawPattern(e,t,i,n,r){if(this.backBufferContext2D.globalAlpha<1/255)return;const o=this.backBufferContext2D.fillStyle;this.backBufferContext2D.fillStyle=e,this.backBufferContext2D.fillRect(t,i,n,r),this.backBufferContext2D.fillStyle=o},fillArc(e,t,i,n,r,o){this.backBufferContext2D.globalAlpha<1/255||(this.translate(e+i,t+i),this.backBufferContext2D.beginPath(),this.backBufferContext2D.arc(0,0,i,n,r,o||!1),this.backBufferContext2D.fill(),this.backBufferContext2D.closePath(),this.translate(-(e+i),-(t+i)))},fillRect(e,t,i,n){this.backBufferContext2D.globalAlpha<1/255||this.backBufferContext2D.fillRect(e,t,i,n)},getContext(){return this.backBufferContext2D},getFontContext(){return this.getContext()},resetTransform(){this.backBufferContext2D.setTransform(1,0,0,1,0,0)},scaleCanvas(e,t){this.canvas.width=this.gameWidthZoom=this.backBufferCanvas.width*e,this.canvas.height=this.gameHeightZoom=this.backBufferCanvas.height*t,me.device.getPixelRatio()>1&&(this.canvas.style.width=`${this.canvas.width/me.device.getPixelRatio()}px`,this.canvas.style.height=`${this.canvas.height/me.device.getPixelRatio()}px`),this.doubleBuffering&&this.transparent&&(this.context.globalCompositeOperation="copy"),this.setAntiAlias(this.context,this.antiAlias),this.flush()},save(){this.backBufferContext2D.save()},restore(){this.backBufferContext2D.restore(),this.currentColor.glArray[3]=this.backBufferContext2D.globalAlpha},rotate(e){this.backBufferContext2D.rotate(e)},scale(e,t){this.backBufferContext2D.scale(e,t)},setColor(e){this.backBufferContext2D.strokeStyle=this.backBufferContext2D.fillStyle=e instanceof me.Color?e.toRGBA():e},setGlobalAlpha(e){this.backBufferContext2D.globalAlpha=this.currentColor.glArray[3]=e},setLineWidth(e){this.backBufferContext2D.lineWidth=e},strokeArc(e,t,i,n,r,o){this.backBufferContext2D.globalAlpha<1/255||(this.translate(e+i,t+i),this.backBufferContext2D.beginPath(),this.backBufferContext2D.arc(0,0,i,n,r,o||!1),this.backBufferContext2D.stroke(),this.backBufferContext2D.closePath(),this.translate(-(e+i),-(t+i)))},strokeEllipse(e,t,i,n){if(this.backBufferContext2D.globalAlpha<1/255)return;let r=e-i,o=e+i,s=t-n,a=t+n,h=.551784*i,l=.551784*n,c=e-h,u=e+h,d=t-l,p=t+l;this.backBufferContext2D.beginPath(),this.backBufferContext2D.moveTo(e,s),this.backBufferContext2D.bezierCurveTo(u,s,o,d,o,t),this.backBufferContext2D.bezierCurveTo(o,p,u,a,e,a),this.backBufferContext2D.bezierCurveTo(c,a,r,p,r,t),this.backBufferContext2D.bezierCurveTo(r,d,c,s,e,s),this.backBufferContext2D.stroke()},strokeLine(e,t,i,n){this.backBufferContext2D.globalAlpha<1/255||(this.backBufferContext2D.beginPath(),this.backBufferContext2D.moveTo(e,t),this.backBufferContext2D.lineTo(i,n),this.backBufferContext2D.stroke())},strokePolygon(e){if(this.backBufferContext2D.globalAlpha<1/255)return;let t;this.translate(e.pos.x,e.pos.y),this.backBufferContext2D.beginPath(),this.backBufferContext2D.moveTo(e.points[0].x,e.points[0].y);for(let i=1;i({meta:{app:"melonJS",size:{w:e,h:t},repeat:n||"no-repeat"},frames:[{filename:i||"default",frame:{x:0,y:0,w:e,h:t}}]}),parse(t){const i={};return t.frames.forEach(t=>{if(t.hasOwnProperty("filename")){const n=t.frame;let r,o;const s=t.spriteSourceSize&&t.sourceSize&&t.pivot;s&&(r=t.sourceSize.w*t.pivot.x-(t.trimmed?t.spriteSourceSize.x:0),o=t.sourceSize.h*t.pivot.y-(t.trimmed?t.spriteSourceSize.y:0)),i[t.filename]={name:t.filename,offset:new me.Vector2d(n.x,n.y),anchorPoint:s?new me.Vector2d(r/n.w,o/n.h):null,width:n.w,height:n.h,angle:!0===t.rotated?e:0}}}),i},parseFromSpriteSheet(e){const t={},i=e.image,n=e.spacing||0,r=e.margin||0;let o=i.width,s=i.height;const a=new me.Vector2d(~~((o-r+n)/(e.framewidth+n)),~~((s-r+n)/(e.frameheight+n)));o%(e.framewidth+n)==0&&s%(e.frameheight+n)==0||(o=a.x*(e.framewidth+n),s=a.y*(e.frameheight+n),console.warn(`Spritesheet Texture for image: ${i.src} is not divisible by ${e.framewidth+n}x${e.frameheight+n}, truncating effective size to ${o}x${s}`));for(let i=0,o=a.x*a.y;i{for(;o=l.exec(e);)u[o[2]]=o[1]}),c.forEach(t=>{s.attributes[t]=e.getAttribLocation(a,t),e.enableVertexAttribArray(s.attributes[t])}),Object.keys(u).forEach(t=>{const n=u[t];p[t]=e.getUniformLocation(a,t),d[t]={get:(t=t,function(){return p[t]}),set:function(t,i,n){return 0===i.indexOf("mat")?function(i){e[n](p[t],!1,i)}:function(i){let r=n;i.length&&"v"!==n.substr(-1)&&(r+="v"),e[r](p[t],i)}}(t,n,`uniform${i[n]}`)}}),Object.defineProperties(s.uniforms,d),s},e.createTexture=function(e,t,i,n,r,o,s,a){r=r||"no-repeat",me.utils.isPowerOfTwo(o||i.width)&&me.utils.isPowerOfTwo(s||i.height)||console.warn(`[WebGL Renderer] ${i} is not a POT texture `+`(${o||i.width}x${s||i.height})`);let h=e.createTexture(),l=0===r.search(/^repeat(-x)?$/)?e.REPEAT:e.CLAMP_TO_EDGE,c=0===r.search(/^repeat(-y)?$/)?e.REPEAT:e.CLAMP_TO_EDGE;return e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,h),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,l),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,c),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,n),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,n),o||s||a?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,o,s,a,e.RGBA,e.UNSIGNED_BYTE,i):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,i),h},e}(),me.WebGLRenderer=me.Renderer.extend({init(e,t,i,n){me.Renderer.prototype.init.apply(this,[e,t,i,n]),this.gl=this.getContextGL(e,!this.transparent),this._colorStack=[],this._matrixStack=[],this._linePoints=[new me.Vector2d,new me.Vector2d,new me.Vector2d,new me.Vector2d],this.currentTransform=new me.Matrix2d;const r=n.compositor||me.WebGLRenderer.Compositor;return this.compositor=new r(this),this.cache=new me.Renderer.TextureCache(this.compositor.maxTextures),this.createFillTexture(this.cache),this.scaleCanvas(1,1),this},createFillTexture(e){const t=new Uint8Array([255,255,255,255]);this.fillTexture=new this.Texture(this.Texture.prototype.createAtlas.apply(this.Texture.prototype,[1,1,"fillTexture"]),t,e),this.compositor.uploadTexture(this.fillTexture,1,1,0)},createFontTexture(e){const t=me.video.createCanvas(me.utils.nextPowerOfTwo(this.backBufferCanvas.width),me.utils.nextPowerOfTwo(this.backBufferCanvas.height));this.fontContext2D=this.getContext2d(t),this.fontTexture=new this.Texture(this.Texture.prototype.createAtlas.apply(this.Texture.prototype,[this.backBufferCanvas.width,this.backBufferCanvas.height,"fontTexture"]),t,e),this.compositor.uploadTexture(this.fontTexture)},createPattern(e,t){if(!me.utils.isPowerOfTwo(e.width)||!me.utils.isPowerOfTwo(e.height))throw new me.video.Error(`[WebGL Renderer] ${e} is not a POT texture `+`(${e.width}x${e.height})`);const i=new this.Texture(this.Texture.prototype.createAtlas.apply(this.Texture.prototype,[e.width,e.height,"pattern",t]),e);return this.compositor.uploadTexture(i),i},flush(){this.compositor.flush()},clearColor(e,t){const i=this.currentColor.clone(),n=this.currentTransform.clone();this.currentColor.copy(e),this.currentTransform.identity(),t?this.compositor.clear():this.fillRect(0,0,this.canvas.width,this.canvas.height),this.currentTransform.copy(n),this.currentColor.copy(i),me.pool.push(i)},clearRect(e,t,i,n){const r=this.currentColor.clone();this.currentColor.copy("#0000"),this.fillRect(e,t,i,n),this.currentColor.copy(r),me.pool.push(r)},drawFont(e){const t=this.getFontContext();this.compositor.flush(),this.compositor.uploadTexture(this.fontTexture,0,0,0,!0);const i=`${e.pos.x},${e.pos.y},${e.width},${e.height}`;this.compositor.addQuad(this.fontTexture,i,e.pos.x,e.pos.y,e.width,e.height),t.clearRect(0,0,this.backBufferCanvas.width,this.backBufferCanvas.height)},drawImage(e,t,i,n,r,o,s,a,h){void 0===n?(n=a=e.width,r=h=e.height,o=t,s=i,t=0,i=0):void 0===o&&(o=t,s=i,a=n,h=r,n=e.width,r=e.height,t=0,i=0),!1===this.subPixel&&(o=~~o,s=~~s);const l=`${t},${i},${n},${r}`;this.compositor.addQuad(this.cache.get(e),l,o,s,a,h)},drawPattern(e,t,i,n,r){const o=`0,0,${n},${r}`;this.compositor.addQuad(e,o,t,i,n,r)},fillRect(e,t,i,n){this.compositor.addQuad(this.fillTexture,"default",e,t,i,n)},getScreenContext(){return this.gl},getContextGL(e,t){if(void 0===e||null===e)throw new me.video.Error("You must pass a canvas element in order to create a GL context");if(void 0===e.getContext)throw new me.video.Error("Your browser does not support WebGL.");const i={antialias:this.antiAlias,alpha:!t};return e.getContext("webgl",i)||e.getContext("experimental-webgl",i)},getContext(){return this.gl},getFontContext(){return void 0===this.fontContext2D&&(console.warn("[WebGL Renderer] WARNING : Using Standard me.Font with WebGL will severly impact performances !"),this.createFontTexture(this.cache)),this.fontContext2D},resetTransform(){this.currentTransform.identity()},reset(){this.resetTransform(),this.cache.reset(),this.compositor.reset(),this.createFillTexture(),void 0!==this.fontContext2D&&this.createFontTexture()},scaleCanvas(e,t){const i=this.canvas.width*e,n=this.canvas.height*t;me.device.getPixelRatio()>1?(this.canvas.style.width=`${i/me.device.getPixelRatio()}px`,this.canvas.style.height=`${n/me.device.getPixelRatio()}px`):(this.canvas.style.width=`${i}px`,this.canvas.style.height=`${n}px`),this.compositor.setProjection(this.canvas.width,this.canvas.height)},restore(){if(0!==this._matrixStack.length){const e=this._colorStack.pop(),t=this._matrixStack.pop();this.currentColor.copy(e),this.currentTransform.copy(t),me.pool.push(e),me.pool.push(t)}},save(){this._colorStack.push(this.currentColor.clone()),this._matrixStack.push(this.currentTransform.clone())},rotate(e){this.currentTransform.rotate(e)},scale(e,t){this.currentTransform.scale(e,t)},setAntiAlias(e,t){me.Renderer.prototype.setAntiAlias.apply(this,[e,t])},setGlobalAlpha(e){this.currentColor.glArray[3]=e},setColor(e){const t=this.currentColor.glArray[3];this.currentColor.copy(e),this.currentColor.glArray[3]*=t},setLineWidth(e){this.compositor.lineWidth(e)},strokeArc(){},strokeEllipse(){},strokeLine(e,t,i,n){const r=this._linePoints.slice(0,2);r[0].x=e,r[0].y=t,r[1].x=i,r[1].y=n,this.compositor.drawLine(r,!0)},strokePolygon(e){let t,i,n=e.points.length;for(i=this._linePoints.length;i(Object.keys(e).forEach(n=>{const r=e[n].offset,o=e[n].width,s=e[n].height;e[n].stMap=new Float32Array([r.x/t,r.y/i,(r.x+o)/t,(r.y+s)/i]);const a=`${r.x},${r.y},${t},${i}`;e[a]=e[n]}),e),_insertRegion(e,t,i,n,r){const o=this.source.width,s=this.source.height;return this.atlas[e]={name:e,offset:new me.Vector2d(t,i),width:n,height:r,angle:0,stMap:new Float32Array([t/o,i/s,(t+n)/o,(i+r)/s])},this.atlas[e]}}),me.WebGLRenderer.prototype.Texture.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.WebGLRenderer.Texture.Error"}}),function(){const e=9*Float32Array.BYTES_PER_ELEMENT,t=0*Float32Array.BYTES_PER_ELEMENT,i=2*Float32Array.BYTES_PER_ELEMENT,n=6*Float32Array.BYTES_PER_ELEMENT,r=7*Float32Array.BYTES_PER_ELEMENT;me.WebGLRenderer.Compositor=me.Object.extend({init(o){const s=o.gl;this.length=0,this.units=[],this.maxTextures=Math.min(24,s.getParameter(s.MAX_TEXTURE_IMAGE_UNITS)),this.v=[new me.Vector2d,new me.Vector2d,new me.Vector2d,new me.Vector2d],this.renderer=o,this.gl=o.gl,this.matrix=o.currentTransform,this.color=o.currentColor,this.uMatrix=new me.Matrix2d;const a=s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT).precision<16?"mediump":"highp";this.lineShader=me.video.shader.createShader(this.gl,"precision highp float;attribute vec2 aVertex;uniform mat3 uMatrix;void main(void){gl_Position=vec4((uMatrix*vec3(aVertex,1)).xy,0,1);}","precision "+{precision:a}.precision+" float;uniform vec4 uColor;void main(void){gl_FragColor=uColor;}"),this.quadShader=me.video.shader.createShader(this.gl,"precision highp float;attribute vec2 aVertex;attribute vec4 aColor;attribute float aTexture;attribute vec2 aRegion;uniform mat3 uMatrix;varying vec4 vColor;varying float vTexture;varying vec2 vRegion;void main(void){gl_Position=vec4((uMatrix*vec3(aVertex,1)).xy,0,1);vColor=vec4(aColor.rgb*aColor.a,aColor.a);vTexture=aTexture;vRegion=aRegion;}",function(e){for(var t="precision "+e.precision+" float;uniform sampler2D uSampler["+e.maxTextures+"];varying vec4 vColor;varying float vTexture;varying vec2 vRegion;void main(void){int texture=int(vTexture);if(texture==0){gl_FragColor=texture2D(uSampler[0],vRegion)*vColor;}",i=1;i=16e3&&this.flush(),this.length>=this.sbSize&&this.resizeSB();let a=this.matrix,h=this.v[0].set(i,n),l=this.v[1].set(i+r,n),c=this.v[2].set(i,n+o),u=this.v[3].set(i+r,n+o);a.isIdentity()||(a.multiplyVector(h),a.multiplyVector(l),a.multiplyVector(c),a.multiplyVector(u));let d=this.sbIndex,p=d+9,f=p+9,m=f+9;this.stream[d+0+0]=h.x,this.stream[d+0+1]=h.y,this.stream[p+0+0]=l.x,this.stream[p+0+1]=l.y,this.stream[f+0+0]=c.x,this.stream[f+0+1]=c.y,this.stream[m+0+0]=u.x,this.stream[m+0+1]=u.y,this.stream.set(s,d+2),this.stream.set(s,p+2),this.stream.set(s,f+2),this.stream.set(s,m+2);const g=this.uploadTexture(e);this.stream[d+6]=this.stream[p+6]=this.stream[f+6]=this.stream[m+6]=g;let y=e.getRegion(t);if(void 0===y){!0===me.video.renderer.verbose&&console.warn("Adding texture region",t,"for texture",e);let i=t.split(","),n=+i[0],r=+i[1],o=+i[2],s=+i[3];y=e._insertRegion(t,n,r,o,s)}const v=y.stMap;this.stream[d+7+0]=v[0],this.stream[d+7+1]=v[1],this.stream[p+7+0]=v[2],this.stream[p+7+1]=v[1],this.stream[f+7+0]=v[0],this.stream[f+7+1]=v[3],this.stream[m+7+0]=v[2],this.stream[m+7+1]=v[3],this.sbIndex+=36,this.length++},flush(){if(this.length){const e=this.gl,t=9*this.length*4;e.bufferData(e.ARRAY_BUFFER,this.stream.subarray(0,t),e.STREAM_DRAW),e.drawElements(e.TRIANGLES,6*this.length,e.UNSIGNED_SHORT,0),this.sbIndex=0,this.length=0}},drawLine(o,s){this.useShader(this.lineShader.handle);let a=0;for(let e=0;e0&&t[h]--,n[h]=!1,!o[s]||e._preventDefaultFn(i)}return!0},e.KEY={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:42,INSERT:45,DELETE:46,NUM0:48,NUM1:49,NUM2:50,NUM3:51,NUM4:52,NUM5:53,NUM6:54,NUM7:55,NUM8:56,NUM9:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,WINDOW_KEY:91,NUMPAD0:96,NUMPAD1:97,NUMPAD2:98,NUMPAD3:99,NUMPAD4:100,NUMPAD5:101,NUMPAD6:102,NUMPAD7:103,NUMPAD8:104,NUMPAD9:105,MULTIPLY:106,ADD:107,SUBSTRACT:109,DECIMAL:110,DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,TILDE:126,NUM_LOCK:144,SCROLL_LOCK:145,SEMICOLON:186,PLUS:187,COMMA:188,MINUS:189,PERIOD:190,FORWAND_SLASH:191,GRAVE_ACCENT:192,OPEN_BRACKET:219,BACK_SLASH:220,CLOSE_BRACKET:221,SINGLE_QUOTE:222},e.isKeyPressed=function(e){return!(!t[e]||n[e])&&(i[e]&&(n[e]=!0),!0)},e.keyStatus=function(e){return t[e]>0},e.triggerKeyEvent=function(t,i){i?e._keydown({},t):e._keyup({},t)},e.bindKey=function(s,a,h,l){e._enableKeyboardEvent(),"boolean"!=typeof l&&(l=e.preventDefault),e._KeyBinding[s]=a,o[s]=l,t[a]=0,i[a]=h||!1,n[a]=!1,r[a]={}},e.unlockKey=function(e){n[e]=!1},e.unbindKey=function(n){const s=e._KeyBinding[n];t[s]=0,i[s]=!1,r[s]={},e._KeyBinding[n]=null,o[n]=null}}(me.input),function(){const e=new me.Vector2d;me.Pointer=me.Rect.extend({init(e,t,i,n){this.event=void 0,this.type=void 0,this.button=0,this.isPrimary=!1,this.clientX=void 0,this.clientY=void 0,this.gameX=void 0,this.gameY=void 0,this.gameScreenX=void 0,this.gameScreenY=void 0,this.gameWorldX=void 0,this.gameWorldY=void 0,this.gameLocalX=void 0,this.gameLocalY=void 0,this.pointerId=void 0,me.Rect.prototype.init.apply(this,[e||0,t||0,i||1,n||1])},setEvent(t,i,n,r){let o=1,s=1;this.event=t,this.clientX=i||0,this.clientY=n||0,me.input.globalToLocal(i,n,this.pos),this.isNormalized=!me.device.PointerEvent||me.device.PointerEvent&&!(t instanceof window.PointerEvent),"wheel"===t.type&&(this.deltaMode=1,this.deltaX=t.deltaX,this.deltaY=-.025*t.wheelDelta,t.wheelDeltaX&&(this.deltaX=-.025*t.wheelDeltaX)),this.pointerId=void 0!==r?r:1,this.isPrimary=void 0===t.isPrimary||t.isPrimary,this.button=t.button||0,this.type=t.type,this.gameScreenX=this.pos.x,this.gameScreenY=this.pos.y,me.game.viewport.localToWorld(this.gameScreenX,this.gameScreenY,e),this.gameWorldX=e.x,this.gameWorldY=e.y,!1===this.isNormalized?(o=t.width,s=t.height):"number"==typeof t.radiusX&&(o=2*t.radiusX,s=2*t.radiusY),this.resize(o,s)}})}(),function(e){const t=[],i=new Map,n=new me.Rect(0,0,1,1);let r=!1,o=0,s=[];const a=["wheel"],h=["pointermove","mousemove","touchmove"],l=["pointerdown","mousedown","touchstart"],c=["pointerup","mouseup","touchend"],u=["pointercancel","mousecancel","touchcancel"],d=["pointerenter","mouseenter","touchenter"],p=["pointerover","mouseover","touchover"],f=["pointerleave","mouseleave","touchleave"],m=[a[0],h[0],l[0],c[0],u[0],d[0],p[0],f[0]],g=[a[0],h[1],l[1],c[1],u[1],d[1],p[1],f[1]],y=[h[2],l[2],c[2],u[2],d[2],p[2],f[2]],v={wheel:a,pointermove:h,pointerdown:l,pointerup:c,pointercancel:u,pointerenter:d,pointerover:p,pointerleave:f},w=[];function b(){if(!r){for(let e=0;e=0&&(r=e.callbacks[t][n]);n--)if(!1===r(i))return!0}return!1}function E(r){let a=!1;for(;r.length>0;){const m=r.pop();if(t.push(m),void 0!==m.event.timeStamp){if(m.event.timeStamp0;)o.callbacks[e].pop();0===o.callbacks[e].length&&delete o.callbacks[e]}0===Object.keys(o.callbacks).length&&i.delete(t)}},e._translatePointerEvents=function(){e.registerPointerEvent("pointermove",me.game.viewport,e=>{me.event.publish(me.event.POINTERMOVE,[e])})}}(me.input),function(e){let t=.1;function i(e){return e}function n(t,i,n){return t=t>0?n===e.GAMEPAD.BUTTONS.L2?Math.max(0,t-2e4)/111070:(t-1)/131070:(65536+t)/131070+.5}const r=/^([0-9a-f]{1,4})-([0-9a-f]{1,4})-/i,o=/^0+/;function s(e,t){const n=e.replace(r,(e,t,i)=>`${"000".substr(t.length-1)+t}-${"000".substr(i.length-1)}${i}-`),s=e.replace(r,(e,t,i)=>`${t.replace(o,"")}-${i.replace(o,"")}-`);t.analog=t.analog||t.buttons.map(()=>-1),t.normalize_fn=t.normalize_fn||i,h.set(n,t),h.set(s,t)}const a={};var h=new Map;[["45e-28e-Xbox 360 Wired Controller",{axes:[0,1,3,4],buttons:[11,12,13,14,8,9,-1,-1,5,4,6,7,0,1,2,3,10],analog:[-1,-1,-1,-1,-1,-1,2,5,-1,-1,-1,-1,-1,-1,-1,-1,-1],normalize_fn:function(t,i,n){return n===e.GAMEPAD.BUTTONS.L2||n===e.GAMEPAD.BUTTONS.R2?(t+1)/2:t}}],["54c-268-PLAYSTATION(R)3 Controller",{axes:[0,1,2,3],buttons:[14,13,15,12,10,11,8,9,0,3,1,2,4,6,7,5,16]}],["54c-5c4-Wireless Controller",{axes:[0,1,2,3],buttons:[1,0,2,3,4,5,6,7,8,9,10,11,14,15,16,17,12,13]}],["2836-1-OUYA Game Controller",{axes:[0,3,7,9],buttons:[3,6,4,5,7,8,15,16,-1,-1,9,10,11,12,13,14,-1],analog:[-1,-1,-1,-1,-1,-1,5,11,-1,-1,-1,-1,-1,-1,-1,-1,-1],normalize_fn:n}],["OUYA Game Controller (Vendor: 2836 Product: 0001)",{axes:[0,1,3,4],buttons:[0,3,1,2,4,5,12,13,-1,-1,6,7,8,9,10,11,-1],analog:[-1,-1,-1,-1,-1,-1,2,5,-1,-1,-1,-1,-1,-1,-1,-1,-1],normalize_fn:n}]].forEach(e=>{s(e[0],e[1])}),window.addEventListener("gamepadconnected",e=>{me.event.publish(me.event.GAMEPAD_CONNECTED,[e.gamepad])},!1),window.addEventListener("gamepaddisconnected",e=>{me.event.publish(me.event.GAMEPAD_DISCONNECTED,[e.gamepad])},!1),e._updateGamepads=navigator.getGamepads?function(){const i=navigator.getGamepads(),n={};Object.keys(a).forEach(r=>{const o=i[r];if(!o)return;let s=null;"standard"!==o.mapping&&(s=h.get(o.id));const l=a[r];Object.keys(l.buttons).forEach(i=>{const a=l.buttons[i];let h=i,c=-1;if(s&&(h=s.buttons[i],c=s.analog[i],h<0&&c<0))return;let u=o.buttons[h]||{};if(s&&c>=0){const e=s.normalize_fn(o.axes[c],-1,+i);u={value:e,pressed:u.pressed||Math.abs(e)>=t}}me.event.publish(me.event.GAMEPAD_UPDATE,[r,"buttons",+i,u]),!a.pressed&&u.pressed?e._keydown(n,a.keyCode,h+256):a.pressed&&!u.pressed&&e._keyup(n,a.keyCode,h+256),a.value=u.value,a.pressed=u.pressed}),Object.keys(l.axes).forEach(i=>{const a=l.axes[i];let h=i;if(s&&(h=s.axes[i])<0)return;let c=o.axes[h];if(void 0===c)return;s&&(c=s.normalize_fn(c,+i,-1));let u=Math.sign(c)||1;if(0===a[u].keyCode)return;const d=Math.abs(c)>=t+Math.abs(a[u].threshold);me.event.publish(me.event.GAMEPAD_UPDATE,[r,"axes",+i,c]),!a[u].pressed&&d?(a[-u].pressed&&(e._keyup(n,a[-u].keyCode,h+256),a[-u].value=0,a[-u].pressed=!1),e._keydown(n,a[u].keyCode,h+256)):!a[u].pressed&&!a[-u].pressed||d||(u=a[u].pressed?u:-u,e._keyup(n,a[u].keyCode,h+256)),a[u].value=c,a[u].pressed=d})})}:function(){},e.GAMEPAD={AXES:{LX:0,LY:1,RX:2,RY:3,EXTRA_1:4,EXTRA_2:5,EXTRA_3:6,EXTRA_4:7},BUTTONS:{FACE_1:0,FACE_2:1,FACE_3:2,FACE_4:3,L1:4,R1:5,L2:6,R2:7,SELECT:8,BACK:8,START:9,FORWARD:9,L3:10,R3:11,UP:12,DOWN:13,LEFT:14,RIGHT:15,HOME:16,EXTRA_1:17,EXTRA_2:18,EXTRA_3:19,EXTRA_4:20}},e.bindGamepad=function(t,i,n){if(!e._KeyBinding[n])throw new me.Error(`no action defined for keycode ${n}`);a[t]||(a[t]={axes:{},buttons:{}});const r={keyCode:n,value:0,pressed:!1,threshold:i.threshold},o=a[t][i.type];if("buttons"===i.type)o[i.code]=r;else if("axes"===i.type){const e=Math.sign(i.threshold)||1;o[i.code]||(o[i.code]={});const t=o[i.code];t[e]=r,t[-e]||(t[-e]={keyCode:0,value:0,pressed:!1,threshold:-e})}},e.unbindGamepad=function(e,t){if(!a[e])throw new me.Error(`no bindings for gamepad ${e}`);a[e].buttons[t]={}},e.setGamepadDeadzone=function(e){t=e},e.setGamepadMapping=s}(me.input),function(){const e=function(){const e={},t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.decode=function(e){if(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,""),me.device.nativeBase64)return window.atob(e);let i,n,r,o,s,a,h,l=[],c=0;for(;c>4,n=(15&s)<<4|(a=t.indexOf(e.charAt(c++)))>>2,r=(3&a)<<6|(h=t.indexOf(e.charAt(c++))),l.push(String.fromCharCode(i)),64!==a&&l.push(String.fromCharCode(n)),64!==h&&l.push(String.fromCharCode(r));return l=l.join("")},e.encode=function(e){if(e=e.replace(/\r\n/g,"\n"),me.device.nativeBase64)return window.btoa(e);let i,n,r,o,s,a,h,l=[],c=0;for(;c>2,s=(3&i)<<4|(n=e.charCodeAt(c++))>>4,a=(15&n)<<2|(r=e.charCodeAt(c++))>>6,h=63&r,isNaN(n)?a=h=64:isNaN(r)&&(h=64),l.push(t.charAt(o)),l.push(t.charAt(s)),l.push(t.charAt(a)),l.push(t.charAt(h));return l=l.join("")},e}();me.utils=function(){const t={};let i="",n=0;const r=/^.*(\\|\/|\:)/,o=/\.[^\.]*$/;return t.decodeBase64=function(t){return e.decode(t)},t.encodeBase64=function(t){return e.encode(t)},t.decodeBase64AsArray=function(t,i){i=i||1;let n,r,o,s=e.decode(t);const a=new Uint32Array(s.length/i);for(n=0,o=s.length/i;n=0;--r)a[n]+=s.charCodeAt(n*i+r)<<(r<<3);return a},t.decompress=function(){throw new me.Error("GZIP/ZLIB compressed TMX Tile Map not supported!")},t.decodeCSV=function(e){const t=e.replace("\n","").trim().split(","),i=[];for(let e=0;e>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e},t}()}(),function(){const e=/^rgba?\((\d+), ?(\d+), ?(\d+)(, ?([\d\.]+))?\)$/,t=/^#([\da-fA-F])([\da-fA-F])([\da-fA-F])$/,i=/^#([\da-fA-F])([\da-fA-F])([\da-fA-F])([\da-fA-F])$/,n=/^#([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})$/,r=/^#([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})$/,o=new Map;[["black",[0,0,0]],["silver",[192,192,129]],["gray",[128,128,128]],["white",[255,255,255]],["maroon",[128,0,0]],["red",[255,0,0]],["purple",[128,0,128]],["fuchsia",[255,0,255]],["green",[0,128,0]],["lime",[0,255,0]],["olive",[128,128,0]],["yellow",[255,255,0]],["navy",[0,0,128]],["blue",[0,0,255]],["teal",[0,128,128]],["aqua",[0,255,255]],["orange",[255,165,0]],["aliceblue",[240,248,245]],["antiquewhite",[250,235,215]],["aquamarine",[127,255,212]],["azure",[240,255,255]],["beige",[245,245,220]],["bisque",[255,228,196]],["blanchedalmond",[255,235,205]],["blueviolet",[138,43,226]],["brown",[165,42,42]],["burlywood",[222,184,35]],["cadetblue",[95,158,160]],["chartreuse",[127,255,0]],["chocolate",[210,105,30]],["coral",[255,127,80]],["cornflowerblue",[100,149,237]],["cornsilk",[255,248,220]],["crimson",[220,20,60]],["darkblue",[0,0,139]],["darkcyan",[0,139,139]],["darkgoldenrod",[184,134,11]],["darkgray[*]",[169,169,169]],["darkgreen",[0,100,0]],["darkgrey[*]",[169,169,169]],["darkkhaki",[189,183,107]],["darkmagenta",[139,0,139]],["darkolivegreen",[85,107,47]],["darkorange",[255,140,0]],["darkorchid",[153,50,204]],["darkred",[139,0,0]],["darksalmon",[233,150,122]],["darkseagreen",[143,188,143]],["darkslateblue",[72,61,139]],["darkslategray",[47,79,79]],["darkslategrey",[47,79,79]],["darkturquoise",[0,206,209]],["darkviolet",[148,0,211]],["deeppink",[255,20,147]],["deepskyblue",[0,191,255]],["dimgray",[105,105,105]],["dimgrey",[105,105,105]],["dodgerblue",[30,144,255]],["firebrick",[178,34,34]],["floralwhite",[255,250,240]],["forestgreen",[34,139,34]],["gainsboro",[220,220,220]],["ghostwhite",[248,248,255]],["gold",[255,215,0]],["goldenrod",[218,165,32]],["greenyellow",[173,255,47]],["grey",[128,128,128]],["honeydew",[240,255,240]],["hotpink",[255,105,180]],["indianred",[205,92,92]],["indigo",[75,0,130]],["ivory",[255,255,240]],["khaki",[240,230,140]],["lavender",[230,230,250]],["lavenderblush",[255,240,245]],["lawngreen",[124,252,0]],["lemonchiffon",[255,250,205]],["lightblue",[173,216,230]],["lightcoral",[240,128,128]],["lightcyan",[224,255,255]],["lightgoldenrodyellow",[250,250,210]],["lightgray",[211,211,211]],["lightgreen",[144,238,144]],["lightgrey",[211,211,211]],["lightpink",[255,182,193]],["lightsalmon",[255,160,122]],["lightseagreen",[32,178,170]],["lightskyblue",[135,206,250]],["lightslategray",[119,136,153]],["lightslategrey",[119,136,153]],["lightsteelblue",[176,196,222]],["lightyellow",[255,255,224]],["limegreen",[50,205,50]],["linen",[250,240,230]],["mediumaquamarine",[102,205,170]],["mediumblue",[0,0,205]],["mediumorchid",[186,85,211]],["mediumpurple",[147,112,219]],["mediumseagreen",[60,179,113]],["mediumslateblue",[123,104,238]],["mediumspringgreen",[0,250,154]],["mediumturquoise",[72,209,204]],["mediumvioletred",[199,21,133]],["midnightblue",[25,25,112]],["mintcream",[245,255,250]],["mistyrose",[255,228,225]],["moccasin",[255,228,181]],["navajowhite",[255,222,173]],["oldlace",[253,245,230]],["olivedrab",[107,142,35]],["orangered",[255,69,0]],["orchid",[218,112,214]],["palegoldenrod",[238,232,170]],["palegreen",[152,251,152]],["paleturquoise",[175,238,238]],["palevioletred",[219,112,147]],["papayawhip",[255,239,213]],["peachpuff",[255,218,185]],["peru",[205,133,63]],["pink",[255,192,203]],["plum",[221,160,221]],["powderblue",[176,224,230]],["rosybrown",[188,143,143]],["royalblue",[65,105,225]],["saddlebrown",[139,69,19]],["salmon",[250,128,114]],["sandybrown",[244,164,96]],["seagreen",[46,139,87]],["seashell",[255,245,238]],["sienna",[160,82,45]],["skyblue",[135,206,235]],["slateblue",[106,90,205]],["slategray",[112,128,144]],["slategrey",[112,128,144]],["snow",[255,250,250]],["springgreen",[0,255,127]],["steelblue",[70,130,180]],["tan",[210,180,140]],["thistle",[216,191,216]],["tomato",[255,99,71]],["turquoise",[64,224,208]],["violet",[238,130,238]],["wheat",[245,222,179]],["whitesmoke",[245,245,245]],["yellowgreen",[154,205,50]]].forEach(e=>{o.set(e[0],e[1])}),me.Color=me.Object.extend({init(e,t,i,n){return void 0===this.glArray&&(this.glArray=new Float32Array([0,0,0,1])),this.setColor(e,t,i,n)},setColor(e,t,i,n){return e instanceof me.Color?(this.glArray.set(e.glArray),e):(this.r=e,this.g=t,this.b=i,this.alpha=n,this)},clone(){return me.pool.pull("me.Color",this)},copy(e){return e instanceof me.Color?(this.glArray.set(e.glArray),this):this.parseCSS(e)},add(e){return this.glArray[0]=(this.glArray[0]+e.glArray[0]).clamp(0,1),this.glArray[1]=(this.glArray[1]+e.glArray[1]).clamp(0,1),this.glArray[2]=(this.glArray[2]+e.glArray[2]).clamp(0,1),this.glArray[3]=(this.glArray[3]+e.glArray[3])/2,this},darken(e){return e=e.clamp(0,1),this.glArray[0]*=e,this.glArray[1]*=e,this.glArray[2]*=e,this},lighten(e){return e=e.clamp(0,1),this.glArray[0]=(this.glArray[0]+(1-this.glArray[0])*e).clamp(0,1),this.glArray[1]=(this.glArray[1]+(1-this.glArray[1])*e).clamp(0,1),this.glArray[2]=(this.glArray[2]+(1-this.glArray[2])*e).clamp(0,1),this},random(){return this.setColor(256*Math.random(),256*Math.random(),256*Math.random(),this.alpha)},equals(e){return this.glArray[0]===e.glArray[0]&&this.glArray[1]===e.glArray[1]&&this.glArray[2]===e.glArray[2]&&this.glArray[3]===e.glArray[3]},parseCSS(e){return o.has(e)?this.setColor.apply(this,o.get(e)):this.parseRGB(e)},parseRGB(t){const i=e.exec(t);return i?this.setColor(+i[1],+i[2],+i[3],+i[5]):this.parseHex(t)},parseHex(e){let o;if(o=r.exec(e))return this.setColor(parseInt(o[1],16),parseInt(o[2],16),parseInt(o[3],16),(parseInt(o[4],16).clamp(0,255)/255).toFixed(1));if(o=n.exec(e))return this.setColor(parseInt(o[1],16),parseInt(o[2],16),parseInt(o[3],16));if(o=i.exec(e))return this.setColor(parseInt(o[1]+o[1],16),parseInt(o[2]+o[2],16),parseInt(o[3]+o[3],16),(parseInt(o[4]+o[4],16).clamp(0,255)/255).toFixed(1));if(o=t.exec(e))return this.setColor(parseInt(o[1]+o[1],16),parseInt(o[2]+o[2],16),parseInt(o[3]+o[3],16));throw new me.Color.Error(`invalid parameter: ${e}`)},toGL(){return this.glArray},toHex(){return`#${this.r.toHex()}${this.g.toHex()}${this.b.toHex()}`},toHex8(){return`#${this.r.toHex()}${this.g.toHex()}${this.b.toHex()}${this.alpha.toHex()}`},toRGB(){return`rgb(${this.r},${this.g},${this.b})`},toRGBA(){return`rgba(${this.r},${this.g},${this.b},${this.alpha})`}}),Object.defineProperty(me.Color.prototype,"r",{get(){return~~(255*this.glArray[0])},set(e){this.glArray[0]=(~~e||0).clamp(0,255)/255},enumerable:!0,configurable:!0}),Object.defineProperty(me.Color.prototype,"g",{get(){return~~(255*this.glArray[1])},set(e){this.glArray[1]=(~~e||0).clamp(0,255)/255},enumerable:!0,configurable:!0}),Object.defineProperty(me.Color.prototype,"b",{get(){return~~(255*this.glArray[2])},set(e){this.glArray[2]=(~~e||0).clamp(0,255)/255},enumerable:!0,configurable:!0}),Object.defineProperty(me.Color.prototype,"alpha",{get(){return this.glArray[3]},set(e){this.glArray[3]=void 0===e?1:(+e).clamp(0,1)},enumerable:!0,configurable:!0}),me.Color.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.Color.Error"}})}(),me.save=function(){const e={};function t(e){return"add"===e||"remove"===e}var i={_init(){!0===me.device.localStorage&&(JSON.parse(localStorage.getItem("me.save"))||[]).forEach(t=>{e[t]=JSON.parse(localStorage.getItem(`me.save.${t}`))})},add(n){var r;Object.keys(n).forEach(o=>{t(o)||(r=o,Object.defineProperty(i,r,{configurable:!0,enumerable:!0,get:()=>e[r],set(t){e[r]=t,!0===me.device.localStorage&&localStorage.setItem(`me.save.${r}`,JSON.stringify(t))}}),o in e||(i[o]=n[o]))}),!0===me.device.localStorage&&localStorage.setItem("me.save",JSON.stringify(Object.keys(e)))},remove(i){t(i)||void 0!==e[i]&&(delete e[i],!0===me.device.localStorage&&(localStorage.removeItem(`me.save.${i}`),localStorage.setItem("me.save",JSON.stringify(Object.keys(e)))))}};return i}(),function(){me.TMXUtils=function(){const api={};function setTMXValue(name,type,value){let match;if("string"!=typeof value)return value;switch(type){case"int":case"float":value=Number(value);break;case"bool":value="true"===value;break;default:if(!value||value.isBoolean())value=!value||"true"===value;else if(value.isNumeric())value=Number(value);else if(0===value.search(/^json:/i)){match=value.split(/^json:/i)[1];try{value=JSON.parse(match)}catch(e){throw new me.Error(`Unable to parse JSON: ${match}`)}}else if(0===value.search(/^eval:/i)){match=value.split(/^eval:/i)[1];try{value=eval(match)}catch(e){throw new me.Error(`Unable to evaluate: ${match}`)}}else((match=value.match(/^#([\da-fA-F])([\da-fA-F]{3})$/))||(match=value.match(/^#([\da-fA-F]{2})([\da-fA-F]{6})$/)))&&(value=`#${match[2]}${match[1]}`);0===name.search(/^(ratio|anchorPoint)$/)&&"number"==typeof value&&(value={x:value,y:value})}return value}function parseAttributes(e,t){if(t.attributes&&t.attributes.length>0)for(let i=0;i{r.objects.push(new me.TMXObject(e,t,i))}),t.layers&&t.layers.forEach(t=>{const n=new me.TMXLayer(e.tilewidth,e.tileheight,e.orientation,e.tilesets,i++);n.initFromJSON(t),n.setRenderer(e.getRenderer(n)),r.width=Math.max(r.width,n.width),r.height=Math.max(r.height,n.height),r.objects.push(n)})},destroy(){this.objects=null},getObjectCount(){return this.objects.length},getObjectByIndex(e){return this.objects[e]}}),me.TMXObject=me.Object.extend({init(e,t,i){if(this.points=void 0,this.name=t.name,this.x=+t.x,this.y=+t.y,this.z=+i,this.width=+t.width||0,this.height=+t.height||0,this.gid=+t.gid||null,this.type=t.type,this.rotation=Number.prototype.degToRad(+t.rotation||0),this.id=+t.id||void 0,this.orientation=e.orientation,this.shapes=void 0,this.isEllipse=!1,this.isPolygon=!1,this.isPolyLine=!1,"number"==typeof this.gid)this.setTile(e.tilesets);else if(void 0!==t.ellipse)this.isEllipse=!0;else{let e=t.polygon;if(void 0!==e?this.isPolygon=!0:void 0!==(e=t.polyline)&&(this.isPolyLine=!0),void 0!==e){this.points=[];const t=this;e.forEach(e=>{t.points.push(new me.Vector2d(e.x,e.y))})}}e.getRenderer().adjustPosition(this),me.TMXUtils.applyTMXProperties(this,t),this.shapes||(this.shapes=this.parseTMXShapes())},setTile(e){const t=e.getTilesetByGid(this.gid);!1===t.isCollection&&(this.width=this.framewidth=t.tilewidth,this.height=this.frameheight=t.tileheight),this.tile=new me.Tile(this.x,this.y,this.gid,t)},parseTMXShapes(){let e=0;const t=[];if(!0===this.isEllipse)t.push(new me.Ellipse(this.width/2,this.height/2,this.width,this.height).rotate(this.rotation));else if(!0===this.isPolygon)t.push(new me.Polygon(0,0,this.points).rotate(this.rotation));else if(!0===this.isPolyLine){const i=this.points;let n,r;const o=i.length-1;for(e=0;e{r.push(e.tileid),n.push({name:`${e.tileid}`,delay:e.duration})}),(t=i.texture.createAnimationFromName(r,e)).addAnimation(this.tileId-i.firstgid,n),t.setCurrentAnimation(this.tileId-i.firstgid)}else if(!0===i.isCollection){const n=i.getTileImage(this.tileId);(t=new me.Sprite(0,0,Object.assign({image:n}))).anchorPoint.set(0,0),t.scale(e.width/this.width,e.height/this.height),void 0!==e.rotation&&(t.anchorPoint.set(.5,.5),t.currentTransform.rotate(e.rotation),t.currentTransform.translate(e.width/2,e.height/2),e.rotation=void 0)}else t=i.texture.createSpriteFromName(this.tileId-i.firstgid,e);return this.flippedX&&t.currentTransform.scaleX(-1),this.flippedY&&t.currentTransform.scaleY(-1),t}}),me.TMXTileset=me.Object.extend({init(e){let t=0;if(this.TileProperties=[],this.imageCollection=[],this.firstgid=this.lastgid=+e.firstgid,void 0!==e.source){const t=e.source,i=me.utils.getFileExtension(t);if(("tsx"===i||"json"===i)&&!(e=me.loader.getTMX(me.utils.getBasename(t))))throw new me.Error(`${t} external TSX/JSON tileset not found`)}this.name=e.name,this.tilewidth=+e.tilewidth,this.tileheight=+e.tileheight,this.spacing=+e.spacing||0,this.margin=+e.margin||0,this.tileoffset=new me.Vector2d,this.isAnimated=!1,this.isCollection=!1,this.animations=new Map,this._lastUpdate=0;const i=e.tiles;for(t in i)if(i.hasOwnProperty(t)&&("animation"in i[t]&&(this.isAnimated=!0,this.animations.set(+t+this.firstgid,{dt:0,idx:0,frames:i[t].animation,cur:i[t].animation[0]})),"properties"in i[t]&&this.setTileProperty(+t+this.firstgid,i[t].properties),"image"in i[t])){const e=me.utils.getImage(i[t].image);if(!e)throw new me.TMXTileset.Error(`melonJS: '${i[t].image}' file for tile '${+t+this.firstgid}' not found!`);this.imageCollection[+t+this.firstgid]=e}this.isCollection=this.imageCollection.length>0;const n=e.tileoffset;n&&(this.tileoffset.x=+n.x,this.tileoffset.y=+n.y);const r=e.tileproperties;if(r)for(t in r)r.hasOwnProperty(t)&&this.setTileProperty(+t+this.firstgid,r[t]);if(!1===this.isCollection){if(this.image=me.utils.getImage(e.image),!this.image)throw new me.TMXTileset.Error(`melonJS: '${e.image}' file for tileset '${this.name}' not found!`);this.texture=me.video.renderer.cache.get(this.image,{framewidth:this.tilewidth,frameheight:this.tileheight,margin:this.margin,spacing:this.spacing}),this.atlas=this.texture.getAtlas();const t=+e.columns||~~(this.image.width/(this.tilewidth+this.spacing)),i=~~(this.image.height/(this.tileheight+this.spacing));this.lastgid=this.firstgid+(t*i-1||0),e.tilecount&&this.lastgid-this.firstgid+1!=+e.tilecount&&console.warn(`Computed tilecount (${this.lastgid-this.firstgid+1}) does not match expected tilecount (${e.tilecount})`)}},getTileImage(e){return this.imageCollection[e]},setTileProperty(e,t){this.TileProperties[e]=t},contains(e){return e>=this.firstgid&&e<=this.lastgid},getViewTileId(e){return this.animations.has(e)?e=this.animations.get(e).cur.tileid:e-=this.firstgid,e},getTileProperties(e){return this.TileProperties[e]},update(e){let t=0,i=me.timer.getTime(),n=!1;return this._lastUpdate!==i&&(this._lastUpdate=i,this.animations.forEach(i=>{for(i.dt+=e,t=i.cur.duration;i.dt>=t;)i.dt-=t,i.idx=(i.idx+1)%i.frames.length,i.cur=i.frames[i.idx],t=i.cur.duration,n=!0})),n},drawTile(e,t,i,n){if(n.flipped&&(e.save(),e.translate(t,i),e.transform(n.currentTransform),t=i=0),!0===this.isCollection)e.drawImage(this.imageCollection[n.tileId],0,0,n.width,n.height,t,i,n.width,n.height);else{const r=this.atlas[this.getViewTileId(n.tileId)].offset;e.drawImage(this.image,r.x,r.y,this.tilewidth,this.tileheight,t,i,this.tilewidth+e.uvOffset,this.tileheight+e.uvOffset)}n.flipped&&e.restore()}}),me.TMXTilesetGroup=me.Object.extend({init(){this.tilesets=[],this.length=0},add(e){this.tilesets.push(e),this.length++},getTilesetByIndex(e){return this.tilesets[e]},getTilesetByGid(e){let t=-1;e&=536870911;for(let i=0,n=this.tilesets.length;i=this.tilesets[i].firstgid&&(t=i)}if(-1!==t)return this.tilesets[t];throw new me.Error(`no matching tileset found for gid ${e}`)}}),me.TMXTileset.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.TMXTileset.Error"}}),function(){const e=[{x:0,y:0},{x:1,y:-1},{x:1,y:0},{x:2,y:0}],t=[{x:0,y:0},{x:-1,y:1},{x:0,y:1},{x:0,y:2}];me.TMXRenderer=me.Object.extend({init(e,t,i,n){this.cols=e,this.rows=t,this.tilewidth=i,this.tileheight=n},canRender(e){return this.cols===e.cols&&this.rows===e.rows&&this.tilewidth===e.tilewidth&&this.tileheight===e.tileheight},pixelToTileCoords:(e,t,i)=>i,tileToPixelCoords:(e,t,i)=>i,pixelToTileX(e){},pixelToTileY(e){},drawTile(e,t,i,n){},drawTileLayer(e,t,i){}}),me.TMXOrthogonalRenderer=me.TMXRenderer.extend({canRender(e){return"orthogonal"===e.orientation&&me.TMXRenderer.prototype.canRender.apply(this,[e])},pixelToTileCoords(e,t,i){return(i||new me.Vector2d).set(this.pixelToTileX(e),this.pixelToTileY(t))},pixelToTileX(e){return e/this.tilewidth},pixelToTileY(e){return e/this.tileheight},tileToPixelCoords(e,t,i){return(i||new me.Vector2d).set(e*this.tilewidth,t*this.tileheight)},adjustPosition(e){"number"==typeof e.gid&&(e.y-=e.height)},drawTile(e,t,i,n){const r=n.tileset;r.drawTile(e,r.tileoffset.x+t*this.tilewidth,r.tileoffset.y+(i+1)*this.tileheight-r.tileheight,n)},drawTileLayer(e,t,i){const n=this.pixelToTileCoords(Math.max(i.pos.x-(t.maxTileSize.width-t.tilewidth),0),Math.max(i.pos.y-(t.maxTileSize.height-t.tileheight),0),me.pool.pull("me.Vector2d")).floorSelf(),r=this.pixelToTileCoords(i.pos.x+i.width+this.tilewidth,i.pos.y+i.height+this.tileheight,me.pool.pull("me.Vector2d")).ceilSelf();r.x=r.x>this.cols?this.cols:r.x,r.y=r.y>this.rows?this.rows:r.y;for(let i=n.y;i>1,-r.tilewidth+(t+i)*r.tileheight>>2,n)},drawTileLayer(e,t,i){let n=t.tileset,r=n.tileoffset;const o=this.pixelToTileCoords(i.pos.x-n.tilewidth,i.pos.y-n.tileheight,me.pool.pull("me.Vector2d")).floorSelf(),s=this.pixelToTileCoords(i.pos.x+i.width+n.tilewidth,i.pos.y+i.height+n.tileheight,me.pool.pull("me.Vector2d")).ceilSelf(),a=this.tileToPixelCoords(s.x,s.y,me.pool.pull("me.Vector2d")),h=this.tileToPixelCoords(o.x,o.y,me.pool.pull("me.Vector2d"));h.x-=this.hTilewidth,h.y+=this.tileheight;const l=h.y-i.pos.y>this.hTileheight,c=i.pos.x-h.x=0&&d.y>=0&&d.xthis.cols?this.cols:r.x,r.y=r.y>this.rows?this.rows:r.y;for(let i=n.y;i0,this.isAnimated&&(this.preRender=!1),this.getBounds().resize(this.width,this.height)},onDeactivateEvent(){this.animatedTilesets=void 0},setRenderer(e){this.renderer=e},getRenderer(e){return this.renderer},initArray(e,t){this.layerData=[];for(let i=0;i=0&&n=0&&r{n.tilesets.add(function(e){return new me.TMXTileset(e)}(e))})}this.backgroundcolor&&this.layers.push(new me.ColorLayer("background_color",this.backgroundcolor,i++)),this.background_image&&this.layers.push(new me.ImageLayer(0,0,{name:"background_image",image:this.background_image,z:i++})),e.layers.forEach(e=>{switch(e.type){case"imagelayer":n.layers.push(function(e,t,i){me.TMXUtils.applyTMXProperties(t.properties,t);const n=new me.ImageLayer(+t.x||0,+t.y||0,Object.assign({name:t.name,image:t.image,z:i},t.properties)),r=void 0===t.visible||t.visible;return n.setOpacity(r?+t.opacity:0),n}(0,e,i++));break;case"tilelayer":n.layers.push(function(e,t,i){const n=new me.TMXLayer(e.tilewidth,e.tileheight,e.orientation,e.tilesets,i);return n.initFromJSON(t),n.setRenderer(e.getRenderer(n)),n}(n,e,i++));break;case"objectgroup":case"group":n.objectGroups.push(t(n,e,i++))}}),this.initialized=!0},addTo(e,t){const i=e.autoSort,n=e.autoDepth;e.autoSort=!1,e.autoDepth=!1,this.getLayers().forEach(t=>{e.addChild(t)}),this.getObjects(t).forEach(t=>{e.addChild(t)}),e.autoSort=i,e.autoDepth=n,e.sort(!0)},getObjects(e){const t=[];let i,n=!1;this.readMapObjects(this.data);for(let o=0;o0&&(i.autoSort=!0,i.autoDepth=!0,t.push(i))}return t},getLayers(){return this.readMapObjects(this.data),this.layers},destroy(){this.tilesets=void 0,this.layers=[],this.objectGroups=[],this.initialized=!1}})}(),me.levelDirector=function(){const e={},t={},i=[];let n=0,r=null;function o(o,s,a){s.container.destroy(),me.video.renderer.reset(),t[e.getCurrentLevelId()]&&t[e.getCurrentLevelId()].destroy(),n=i.indexOf(o),function(e,i,n,o){const s=t[e],a=i.autoSort;function h(){i.pos.set(Math.max(0,~~((me.game.viewport.width-s.width)/2)),Math.max(0,~~((me.game.viewport.height-s.height)/2)),0)}i.autoSort=!1,o&&me.game.viewport.setBounds(0,0,Math.max(s.width,me.game.viewport.width),Math.max(s.height,me.game.viewport.height)),me.utils.resetGUID(e,s.nextobjectid),i.anchorPoint.set(0,0),s.addTo(i,n),i.sort(!0),i.autoSort=a,i.resize(s.width,s.height),o&&(h(),r&&me.event.unsubscribe(r),r=me.event.subscribe(me.event.VIEWPORT_ONRESIZE,h))}(o,s.container,s.flatten,s.setViewportBounds),me.event.publish(me.event.LEVEL_LOADED,[o]),s.onLoaded(o),a&&me.state.restart()}return e.reset=function(){},e.addLevel=function(){throw new me.Error("no level loader defined")},e.addTMXLevel=function(e,n){return null==t[e]&&(t[e]=new me.TMXTileMap(e,me.loader.getTMX(e)),i.push(e),n&&n(),!0)},e.loadLevel=function(e,i){if(i=Object.assign({container:me.game.world,onLoaded:me.game.onLevelLoaded,flatten:me.game.mergeGroup,setViewportBounds:!0},i||{}),void 0===t[e])throw new me.Error(`level ${e} not found`);if(!(t[e]instanceof me.TMXTileMap))throw new me.Error("no level loader defined");return me.state.isRunning()?(me.state.stop(),o.defer(this,e,i,!0)):o(e,i),!0},e.getCurrentLevelId=function(){return i[n]},e.getCurrentLevel=function(){return t[e.getCurrentLevelId()]},e.reloadLevel=function(t){return e.loadLevel(e.getCurrentLevelId(),t)},e.nextLevel=function(t){return n+1=0&&e.loadLevel(i[n-1],t)},e.levelCount=function(){return i.length},e}(),me.Tween=function(e){let t=null,i=null,n=null,r=null,o=null,s=null,a=null,h=null,l=null,c=null,u=null,d=null,p=null,f=null,m=null,g=null,y=null,v=null;this.isRenderable=!1,this._resumeCallback=function(e){c&&(c+=e)},this.setProperties=function(e){t=e,i={},n={},r={},o=1e3,s=0,a=!1,h=!1,l=0,c=null,u=me.Tween.Easing.Linear.None,d=me.Tween.Interpolation.Linear,p=[],f=null,m=!1,g=null,y=null,v=me.timer.lastUpdate,this.isPersistent=!1,this.updateWhenPaused=!1;for(const t in e)"object"!=typeof e&&(i[t]=parseFloat(e[t],10))},this.setProperties(e),this.onResetEvent=function(e){this.setProperties(e)},this.onActivateEvent=function(){me.event.subscribe(me.event.STATE_RESUME,this._resumeCallback)},this.onDeactivateEvent=function(){me.event.unsubscribe(me.event.STATE_RESUME,this._resumeCallback)},this.to=function(e,t){return void 0!==t&&(o=t),n=e,this},this.start=function(e){m=!1,me.game.world.addChild(this),c=(void 0===e?me.timer.getTime():e)+l;for(const e in n){if(n[e]instanceof Array){if(0===n[e].length)continue;n[e]=[t[e]].concat(n[e])}i[e]=t[e],i[e]instanceof Array==0&&(i[e]*=1),r[e]=i[e]||0}return this},this.stop=function(){return me.game.world.removeChildNow(this),this},this.delay=function(e){return l=e,this},this.repeat=function(e){return s=e,this},this.yoyo=function(e){return a=e,this},this.easing=function(e){if("function"!=typeof e)throw new me.Tween.Error("invalid easing function for me.Tween.easing()");return u=e,this},this.interpolation=function(e){return d=e,this},this.chain=function(){return p=arguments,this},this.onStart=function(e){return f=e,this},this.onUpdate=function(e){return g=e,this},this.onComplete=function(e){return y=e,this},this.update=function(e){const w=v=me.timer.lastUpdate>v?me.timer.lastUpdate:v+e;let b;if(w1?1:x);for(b in n){const e=i[b]||0;let r=n[b];r instanceof Array?t[b]=d(r,_):("string"==typeof r&&(r=e+parseFloat(r,10)),"number"==typeof r&&(t[b]=e+(r-e)*_))}if(null!==g&&g.call(t,_),1===x){if(s>0){for(b in isFinite(s)&&s--,r){if("string"==typeof n[b]&&(r[b]=r[b]+parseFloat(n[b],10)),a){const e=r[b];r[b]=n[b],n[b]=e}i[b]=r[b]}return a&&(h=!h),c=w+l,!0}me.game.world.removeChildNow(this),null!==y&&y.call(t);for(let e=0,t=p.length;ee},Quadratic:{In:e=>e*e,Out:e=>e*(2-e),InOut:e=>(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},Cubic:{In:e=>e*e*e,Out:e=>--e*e*e+1,InOut:e=>(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},Quartic:{In:e=>e*e*e*e,Out:e=>1- --e*e*e*e,InOut:e=>(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},Quintic:{In:e=>e*e*e*e*e,Out:e=>--e*e*e*e*e+1,InOut:e=>(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},Sinusoidal:{In:e=>1-Math.cos(e*Math.PI/2),Out:e=>Math.sin(e*Math.PI/2),InOut:e=>.5*(1-Math.cos(Math.PI*e))},Exponential:{In:e=>0===e?0:Math.pow(1024,e-1),Out:e=>1===e?1:1-Math.pow(2,-10*e),InOut:e=>0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(2-Math.pow(2,-10*(e-1)))},Circular:{In:e=>1-Math.sqrt(1-e*e),Out:e=>Math.sqrt(1- --e*e),InOut:e=>(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},Elastic:{In(e){let t,i=.1;return 0===e?0:1===e?1:(!i||i<1?(i=1,t=.1):t=.4*Math.asin(1/i)/(2*Math.PI),-i*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/.4))},Out(e){let t,i=.1;return 0===e?0:1===e?1:(!i||i<1?(i=1,t=.1):t=.4*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*e)*Math.sin((e-t)*(2*Math.PI)/.4)+1)},InOut(e){let t,i=.1;return 0===e?0:1===e?1:(!i||i<1?(i=1,t=.1):t=.4*Math.asin(1/i)/(2*Math.PI),(e*=2)<1?i*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/.4)*-.5:i*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/.4)*.5+1)}},Back:{In(e){const t=1.70158;return e*e*((t+1)*e-t)},Out(e){const t=1.70158;return--e*e*((t+1)*e+t)+1},InOut(e){const t=2.5949095;return(e*=2)<1?e*e*((t+1)*e-t)*.5:.5*((e-=2)*e*((t+1)*e+t)+2)}},Bounce:{In:e=>1-me.Tween.Easing.Bounce.Out(1-e),Out:e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,InOut:e=>e<.5?.5*me.Tween.Easing.Bounce.In(2*e):.5*me.Tween.Easing.Bounce.Out(2*e-1)+.5}},me.Tween.Interpolation={Linear(e,t){let i=e.length-1,n=i*t,r=Math.floor(n),o=me.Tween.Interpolation.Utils.Linear;return t<0?o(e[0],e[1],n):t>1?o(e[i],e[i-1],i-n):o(e[r],e[r+1>i?i:r+1],n-r)},Bezier(e,t){let i,n=0,r=e.length-1,o=Math.pow,s=me.Tween.Interpolation.Utils.Bernstein;for(i=0;i<=r;i++)n+=o(1-t,r-i)*o(t,i)*e[i]*s(r,i);return n},CatmullRom(e,t){let i=e.length-1,n=i*t,r=Math.floor(n),o=me.Tween.Interpolation.Utils.CatmullRom;return e[0]===e[i]?(t<0&&(r=Math.floor(n=i*(1+t))),o(e[(r-1+i)%i],e[r],e[(r+1)%i],e[(r+2)%i],n-r)):t<0?e[0]-(o(e[0],e[0],e[1],e[1],-n)-e[0]):t>1?e[i]-(o(e[i],e[i],e[i-1],e[i-1],n-i)-e[i]):o(e[r?r-1:0],e[r],e[i(t-e)*i+e,Bernstein(e,t){const i=me.Tween.Interpolation.Utils.Factorial;return i(e)/i(t)/i(e-t)},Factorial:function(){const e=[1];return function(t){let i,n=1;if(e[t])return e[t];for(i=t;i>1;i--)n*=i;return e[t]=n}}(),CatmullRom(e,t,i,n,r){let o=.5*(i-e),s=.5*(n-t),a=r*r;return(2*t-2*i+o+s)*(r*a)+(-3*t+3*i-2*o-s)*a+o*r+t}}},me.Tween.Error=me.Error.extend({init(e){me.Error.prototype.init.apply(this,[e]),this.name="me.Tween.Error"}}),me.event=function(){const e={},t={};return e.STATE_PAUSE="me.state.onPause",e.STATE_RESUME="me.state.onResume",e.STATE_STOP="me.state.onStop",e.STATE_RESTART="me.state.onRestart",e.GAME_INIT="me.game.onInit",e.GAME_RESET="me.game.onReset",e.LEVEL_LOADED="me.game.onLevelLoaded",e.LOADER_COMPLETE="me.loader.onload",e.LOADER_PROGRESS="me.loader.onProgress",e.KEYDOWN="me.input.keydown",e.KEYUP="me.input.keyup",e.GAMEPAD_CONNECTED="gamepad.connected",e.GAMEPAD_DISCONNECTED="gamepad.disconnected",e.GAMEPAD_UPDATE="gamepad.update",e.POINTERMOVE="me.event.pointermove",e.DRAGSTART="me.game.dragstart",e.DRAGEND="me.game.dragend",e.WINDOW_ONRESIZE="window.onresize",e.VIEWPORT_ONRESIZE="viewport.onresize",e.WINDOW_ONORIENTATION_CHANGE="window.orientationchange",e.WINDOW_ONSCROLL="window.onscroll",e.VIEWPORT_ONCHANGE="viewport.onchange",e.publish=function(e,i){let n=t[e],r=n?n.length:0;for(;r--;)n[r].apply(window,i||[])},e.subscribe=function(e,i){return t[e]||(t[e]=[]),t[e].push(i),[e,i]},e.unsubscribe=function(e,i){let n=t[i?e:e[0]],r=n?n.length:0;for(i=i||e[1];r--;)n[r]===i&&n.splice(r,1)},e}(),function(){"use strict";const e=function(){this.init()};e.prototype={init(){const e=this||t;return e._counter=1e3,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.mobileAutoEnable=!0,e._setup(),e},volume(e){const i=this||t;if(e=parseFloat(e),i.ctx||l(),void 0!==e&&e>=0&&e<=1){if(i._volume=e,i._muted)return i;i.usingWebAudio&&i.masterGain.gain.setValueAtTime(e,t.ctx.currentTime);for(let t=0;t=0;t--)e._howls[t].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,l()),e},codecs(e){return(this||t)._codecs[e.replace(/^x-/,"")]},_setup(){const e=this||t;if(e.state=e.ctx&&e.ctx.state||"running",e._autoSuspend(),!e.usingWebAudio)if("undefined"!=typeof Audio)try{void 0===(new Audio).oncanplaythrough&&(e._canPlayEvent="canplay")}catch(t){e.noAudio=!0}else e.noAudio=!0;try{(new Audio).muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs(){const e=this||t;let i=null;try{i="undefined"!=typeof Audio?new Audio:null}catch(t){return e}if(!i||"function"!=typeof i.canPlayType)return e;const n=i.canPlayType("audio/mpeg;").replace(/^no$/,""),r=e._navigator&&e._navigator.userAgent.match(/OPR\/([0-6].)/g),o=r&&parseInt(r[0].split("/")[1],10)<33;return e._codecs={mp3:!(o||!n&&!i.canPlayType("audio/mp3;").replace(/^no$/,"")),mpeg:!!n,opus:!!i.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!i.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!i.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!i.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),aac:!!i.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!i.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(i.canPlayType("audio/x-m4a;")||i.canPlayType("audio/m4a;")||i.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(i.canPlayType("audio/x-mp4;")||i.canPlayType("audio/mp4;")||i.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!i.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,""),webm:!!i.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,""),dolby:!!i.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(i.canPlayType("audio/x-flac;")||i.canPlayType("audio/flac;")).replace(/^no$/,"")},e},_enableMobileAudio(){const e=this||t,i=/iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi/i.test(e._navigator&&e._navigator.userAgent),n=!!("ontouchend"in window||e._navigator&&e._navigator.maxTouchPoints>0||e._navigator&&e._navigator.msMaxTouchPoints>0);if(!e._mobileEnabled&&e.ctx&&(i||n)){e._mobileEnabled=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var r=function(){t._autoResume();const i=e.ctx.createBufferSource();i.buffer=e._scratchBuffer,i.connect(e.ctx.destination),void 0===i.start?i.noteOn(0):i.start(0),"function"==typeof e.ctx.resume&&e.ctx.resume(),i.onended=function(){i.disconnect(0),e._mobileEnabled=!0,e.mobileAutoEnable=!1,document.removeEventListener("touchstart",r,!0),document.removeEventListener("touchend",r,!0)}};return document.addEventListener("touchstart",r,!0),document.addEventListener("touchend",r,!0),e}},_autoSuspend(){const e=this;if(e.autoSuspend&&e.ctx&&void 0!==e.ctx.suspend&&t.usingWebAudio){for(let t=0;t{e.autoSuspend&&(e._suspendTimer=null,e.state="suspending",e.ctx.suspend().then(()=>{e.state="suspended",e._resumeAfterSuspend&&(delete e._resumeAfterSuspend,e._autoResume())}))},3e4),e}},_autoResume(){const e=this;if(e.ctx&&void 0!==e.ctx.resume&&t.usingWebAudio)return"running"===e.state&&e._suspendTimer?(clearTimeout(e._suspendTimer),e._suspendTimer=null):"suspended"===e.state?(e.ctx.resume().then(()=>{e.state="running";for(let t=0;t{n._emit("play",o._id)},0),o._id;n._webAudio&&t._autoResume();const s=Math.max(0,o._seek>0?o._seek:n._sprite[e][0]/1e3),a=Math.max(0,(n._sprite[e][0]+n._sprite[e][1])/1e3-s),h=1e3*a/Math.abs(o._rate);o._paused=!1,o._ended=!1,o._sprite=e,o._seek=s,o._start=n._sprite[e][0]/1e3,o._stop=(n._sprite[e][0]+n._sprite[e][1])/1e3,o._loop=!(!o._loop&&!n._sprite[e][2]);const l=o._node;if(n._webAudio){const e=function(){n._refreshBuffer(o);const e=o._muted||n._muted?0:o._volume;l.gain.setValueAtTime(e,t.ctx.currentTime),o._playStart=t.ctx.currentTime,void 0===l.bufferSource.start?o._loop?l.bufferSource.noteGrainOn(0,s,86400):l.bufferSource.noteGrainOn(0,s,a):o._loop?l.bufferSource.start(0,s,86400):l.bufferSource.start(0,s,a),h!==1/0&&(n._endTimers[o._id]=setTimeout(n._ended.bind(n,o),h)),i||setTimeout(()=>{n._emit("play",o._id)},0)};"running"===t.state?e():(n.once("resume",e),n._clearTimer(o._id))}else{const e=function(){l.currentTime=s,l.muted=o._muted||n._muted||t._muted||l.muted,l.volume=o._volume*t.volume(),l.playbackRate=o._rate;try{const e=l.play();if("undefined"!=typeof Promise&&e instanceof Promise&&(n._playLock=!0,e.then(()=>{n._playLock=!1,n._loadQueue()})),l.paused)return void n._emit("playerror",o._id,"Playback was unable to start. This is most commonly an issue on mobile devices where playback was not within a user interaction.");h!==1/0&&(n._endTimers[o._id]=setTimeout(n._ended.bind(n,o),h)),i||n._emit("play",o._id)}catch(e){n._emit("playerror",o._id,e)}},r=window&&window.ejecta||!l.readyState&&t._navigator.isCocoonJS;if(4===l.readyState||r)e();else{var c=function(){e(),l.removeEventListener(t._canPlayEvent,c,!1)};l.addEventListener(t._canPlayEvent,c,!1),n._clearTimer(o._id)}}return o._id},pause(e){const t=this;if("loaded"!==t._state||t._playLock)return t._queue.push({event:"pause",action(){t.pause(e)}}),t;const i=t._getSoundIds(e);for(let e=0;e=0?r=parseInt(i[0],10):n=parseFloat(i[0])}else i.length>=2&&(n=parseFloat(i[0]),r=parseInt(i[1],10));if(!(void 0!==n&&n>=0&&n<=1))return(o=r?e._soundById(r):e._sounds[0])?o._volume:0;if("loaded"!==e._state)return e._queue.push({event:"volume",action(){e.volume(...i)}}),e;void 0===r&&(e._volume=n),r=e._getSoundIds(r);for(let s=0;s0?n/l:n);let u=Date.now();e._fadeTo=i,e._interval=setInterval(()=>{const r=(Date.now()-u)/n;u=Date.now(),a+=h*r,a=Math.max(0,a),a=Math.min(1,a),a=Math.round(100*a)/100,s._webAudio?e._volume=a:s.volume(a,e._id,!0),o&&(s._volume=a),(it&&a>=i)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,s.volume(i,e._id),s._emit("fade",e._id))},c)},_stopFade(e){const i=this,n=i._soundById(e);return n&&n._interval&&(i._webAudio&&n._node.gain.cancelScheduledValues(t.ctx.currentTime),clearInterval(n._interval),n._interval=null,i.volume(n._fadeTo,e),n._fadeTo=null,i._emit("fade",e)),i},loop(){const e=this,t=arguments;let i,n,r;if(0===t.length)return e._loop;if(1===t.length){if("boolean"!=typeof t[0])return!!(r=e._soundById(parseInt(t[0],10)))&&r._loop;i=t[0],e._loop=i}else 2===t.length&&(i=t[0],n=parseInt(t[1],10));const o=e._getSoundIds(n);for(let t=0;t=0?r=parseInt(i[0],10):n=parseFloat(i[0])}else 2===i.length&&(n=parseFloat(i[0]),r=parseInt(i[1],10));if("number"!=typeof n)return(o=e._soundById(r))?o._rate:e._rate;if("loaded"!==e._state)return e._queue.push({event:"rate",action(){e.rate(...i)}}),e;void 0===r&&(e._rate=n),r=e._getSoundIds(r);for(let i=0;i=0?r=parseInt(i[0],10):e._sounds.length&&(r=e._sounds[0]._id,n=parseFloat(i[0]))}else 2===i.length&&(n=parseFloat(i[0]),r=parseInt(i[1],10));if(void 0===r)return e;if("loaded"!==e._state)return e._queue.push({event:"seek",action(){e.seek(...i)}}),e;const o=e._soundById(r);if(o){if(!("number"==typeof n&&n>=0)){if(e._webAudio){const i=e.playing(r)?t.ctx.currentTime-o._playStart:0,n=o._rateSeek?o._rateSeek-o._seek:0;return o._seek+(n+i*Math.abs(o._rate))}return o._node.currentTime}{const t=e.playing(r);t&&e.pause(r,!0),o._seek=n,o._ended=!1,e._clearTimer(r),t&&e.play(r,!0),!e._webAudio&&o._node&&(o._node.currentTime=n),e._emit("seek",r)}}return e},playing(e){const t=this;if("number"==typeof e){const i=t._soundById(e);return!!i&&!i._paused}for(let e=0;e=0&&t._howls.splice(r,1)}let o=!0;for(n=0;n=0;o--)r[o].id&&r[o].id!==t&&"load"!==e||(setTimeout(function(e){e.call(this,t,i)}.bind(n,r[o].fn),0),r[o].once&&n.off(e,r[o].fn,r[o].id));return n},_loadQueue(){const e=this;if(e._queue.length>0){const t=e._queue[0];e.once(t.event,()=>{e._queue.shift(),e._loadQueue()}),t.action()}return e},_ended(e){const i=this,n=e._sprite;if(!i._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;n--){if(i<=t)return;e._sounds[n]._ended&&(e._webAudio&&e._sounds[n]._node&&e._sounds[n]._node.disconnect(0),e._sounds.splice(n,1),i--)}}},_getSoundIds(e){const t=this;if(void 0===e){const e=[];for(let i=0;i{e&&i._sounds.length>0&&(r[i._src]=e,h(i,e))},()=>{i._emit("loaderror",null,"Decoding audio data failed.")})},h=function(e,t){t&&!e._duration&&(e._duration=t.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())},l=function(){try{"undefined"!=typeof AudioContext?t.ctx=new AudioContext:"undefined"!=typeof webkitAudioContext?t.ctx=new webkitAudioContext:t.usingWebAudio=!1}catch(e){t.usingWebAudio=!1}const e=/iP(hone|od|ad)/.test(t._navigator&&t._navigator.platform),i=t._navigator&&t._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),n=i?parseInt(i[1],10):null;if(e&&n&&n<9){const e=/safari/.test(t._navigator&&t._navigator.userAgent.toLowerCase());(t._navigator&&t._navigator.standalone&&!e||t._navigator&&!t._navigator.standalone&&!e)&&(t.usingWebAudio=!1)}t.usingWebAudio&&(t.masterGain=void 0===t.ctx.createGain?t.ctx.createGainNode():t.ctx.createGain(),t.masterGain.gain.setValueAtTime(t._muted?0:1,t.ctx.currentTime),t.masterGain.connect(t.ctx.destination)),t._setup()};"function"==typeof define&&define.amd&&define([],()=>({Howler:t,Howl:i})),"undefined"!=typeof exports&&(exports.Howler=t,exports.Howl=i),"undefined"!=typeof window?(window.HowlerGlobal=e,window.Howler=t,window.Howl=i,window.Sound=n):"undefined"!=typeof global&&(global.HowlerGlobal=e,global.Howler=t,global.Howl=i,global.Sound=n)}(),me.plugins={},me.plugin=function(){const e={};return e.Base=me.Object.extend({init(){this.version="5.1.0"}}),e.patch=function(e,t,i){if(void 0!==e.prototype&&(e=e.prototype),"function"==typeof e[t]){const n=e[t];Object.defineProperty(e,t,{configurable:!0,value:function(e,t){return function(){this._patched=n;const e=t.apply(this,arguments);return this._patched=null,e}}(0,i)})}else console.error(`${t} is not an existing function`)},e.register=function(e,t){me.plugin[t]&&console.error(`plugin ${t} already registered`);let i=[];arguments.length>2&&(i=Array.prototype.slice.call(arguments,1)),i[0]=e;const n=new(e.bind(...i));if(!(n&&n instanceof me.plugin.Base))throw new me.Error("Plugin should extend the me.plugin.Base Class !");if(me.sys.checkVersion(n.version)>0)throw new me.Error(`Plugin version mismatch, expected: ${n.version}, got: ${me.version}`);me.plugins[t]=n},e}(),me.DraggableEntity=function(e,t,i,n){"use strict";return e.extend({init(i,r,o){e.prototype.init.apply(this,[i,r,o]),this.dragging=!1,this.dragId=null,this.grabOffset=new n(0,0),this.onPointerEvent=t.registerPointerEvent,this.removePointerEvent=t.releasePointerEvent,this.initEvents()},initEvents(){const e=this;this.mouseDown=function(e){this.translatePointerEvent(e,i.DRAGSTART)},this.mouseUp=function(e){this.translatePointerEvent(e,i.DRAGEND)},this.onPointerEvent("pointerdown",this,this.mouseDown.bind(this)),this.onPointerEvent("pointerup",this,this.mouseUp.bind(this)),i.subscribe(i.POINTERMOVE,this.dragMove.bind(this)),i.subscribe(i.DRAGSTART,(t,i)=>{i===e&&e.dragStart(t)}),i.subscribe(i.DRAGEND,(t,i)=>{i===e&&e.dragEnd(t)})},translatePointerEvent(e,t){i.publish(t,[e,this])},dragStart(e){if(!1===this.dragging)return this.dragging=!0,this.grabOffset.set(e.gameX,e.gameY),this.grabOffset.sub(this.pos),!1},dragMove(e){!0===this.dragging&&(this.pos.set(e.gameX,e.gameY,this.pos.z),this.pos.sub(this.grabOffset))},dragEnd(){if(!0===this.dragging)return this.dragging=!1,!1},destroy(){i.unsubscribe(i.POINTERMOVE,this.dragMove),i.unsubscribe(i.DRAGSTART,this.dragStart),i.unsubscribe(i.DRAGEND,this.dragEnd),this.removePointerEvent("pointerdown",this),this.removePointerEvent("pointerup",this)}})}(me.Entity,me.input,me.event,me.Vector2d),me.DroptargetEntity=function(e,t){"use strict";return e.extend({init(i,n,r){this.CHECKMETHOD_OVERLAP="overlaps",this.CHECKMETHOD_CONTAINS="contains",this.checkMethod=null,e.prototype.init.apply(this,[i,n,r]),t.subscribe(t.DRAGEND,this.checkOnMe.bind(this)),this.checkMethod=this[this.CHECKMETHOD_OVERLAP]},setCheckMethod(e){void 0!==this[e]&&(this.checkMethod=this[e])},checkOnMe(e,t){t&&this.checkMethod(t.getBounds())&&this.drop(t)},drop(){},destroy(){t.unsubscribe(t.DRAGEND,this.checkOnMe)}})}(me.Entity,me.event),me.CollectableEntity=me.Entity.extend({init(e,t,i){me.Entity.prototype.init.apply(this,[e,t,i]),this.body.collisionType=me.collision.types.COLLECTABLE_OBJECT}}),me.LevelEntity=me.Entity.extend({init(e,t,i){me.Entity.prototype.init.apply(this,[e,t,i]),this.nextlevel=i.to,this.fade=i.fade,this.duration=i.duration,this.fading=!1,this.name="levelEntity",this.gotolevel=i.to,this.loadLevelSettings={},["container","onLoaded","flatten","setViewportBounds"].forEach(e=>{void 0!==i[e]&&(this.loadLevelSettings[e]=i[e])}),this.body.collisionType=me.collision.types.ACTION_OBJECT},getlevelSettings(){return"string"==typeof this.loadLevelSettings.container&&(this.loadLevelSettings.container=me.game.world.getChildByName(this.loadLevelSettings.container)[0]),this.loadLevelSettings},onFadeComplete(){me.levelDirector.loadLevel(this.gotolevel,this.getlevelSettings()),me.game.viewport.fadeOut(this.fade,this.duration)},goTo(e){this.gotolevel=e||this.nextlevel,this.fade&&this.duration?this.fading||(this.fading=!0,me.game.viewport.fadeIn(this.fade,this.duration,this.onFadeComplete.bind(this))):me.levelDirector.loadLevel(this.gotolevel,this.getlevelSettings())},onCollision(){return"levelEntity"===this.name&&this.goTo.apply(this),!1}}),function(){const e=function(){const e=me.video.createCanvas(1,1),t=e.getContext("2d");return t.fillStyle="#fff",t.fillRect(0,0,1,1),e}();me.ParticleEmitterSettings={width:0,height:0,image:e,totalParticles:50,angle:Math.PI/2,angleVariation:0,minLife:1e3,maxLife:3e3,speed:2,speedVariation:1,minRotation:0,maxRotation:0,minStartScale:1,maxStartScale:1,minEndScale:0,maxEndScale:0,gravity:0,wind:0,followTrajectory:!1,textureAdditive:!1,onlyInViewport:!0,floating:!1,maxParticles:10,frequency:100,duration:1/0,framesToSkip:0},me.ParticleEmitter=me.Rect.extend({init(e,t,i){this._stream=!1,this._frequencyTimer=0,this._durationTimer=0,this._enabled=!1,this.isRenderable=!1,me.Rect.prototype.init.apply(this,[e,t,1/0,1/0]),this.autoSort=!1,this.container=new me.ParticleContainer(this),Object.defineProperty(this.pos,"z",{get:function(){return this.container.pos.z}.bind(this),set:function(e){this.container.pos.z=e}.bind(this),enumerable:!0,configurable:!0}),Object.defineProperty(this,"floating",{get(){return this.container.floating},set(e){this.container.floating=e},enumerable:!0,configurable:!0}),this.reset(i)},onActivateEvent(){this.ancestor.addChild(this.container),this.container.pos.z=this.pos.z,this.ancestor.autoSort||this.ancestor.sort()},onDeactivateEvent(){this.ancestor.hasChild(this.container)&&this.ancestor.removeChildNow(this.container)},destroy(){this.reset()},getRandomPointX(){return this.pos.x+(0).randomFloat(this.width)},getRandomPointY(){return this.pos.y+(0).randomFloat(this.height)},reset(e){e=e||{};const t=me.ParticleEmitterSettings,i="number"==typeof e.width?e.width:t.width,n="number"==typeof e.height?e.height:t.height;this.resize(i,n),Object.assign(this,t,e),this.container.destroy()},addParticles(e){for(let t=0;t<~~e;t++){const e=me.pool.pull("me.Particle",this);this.container.addChild(e)}},isRunning(){return this._enabled&&this._stream},streamParticles(e){this._enabled=!0,this._stream=!0,this.frequency=Math.max(this.frequency,1),this._durationTimer="number"==typeof e?e:this.duration},stopStream(){this._enabled=!1},burstParticles(e){this._enabled=!0,this._stream=!1,this.addParticles("number"==typeof e?e:this.totalParticles),this._enabled=!1},update(e){if(this._enabled&&this._stream){if(this._durationTimer!==1/0&&(this._durationTimer-=e,this._durationTimer<=0))return this.stopStream(),!1;this._frequencyTimer+=e;const t=this.container.children.length;t=this.frequency&&(t+this.maxParticles<=this.totalParticles?this.addParticles(this.maxParticles):this.addParticles(this.totalParticles-t),this._frequencyTimer=0)}return!0}})}(),me.ParticleContainer=me.Container.extend({init(e){me.Container.prototype.init.apply(this,[me.game.viewport.pos.x,me.game.viewport.pos.y,me.game.viewport.width,me.game.viewport.height]),this.autoSort=!1,this._updateCount=0,this._dt=0,this._emitter=e,this.autoTransform=!1,this.anchorPoint.set(0,0),this.isKinematic=!0},update(e){if(++this._updateCount>this._emitter.framesToSkip&&(this._updateCount=0),this._updateCount>0)return this._dt+=e,!1;e+=this._dt,this._dt=0;const t=me.game.viewport;for(let i=this.children.length-1;i>=0;--i){const n=this.children[i];n.inViewport=this.floating||t.isVisible(n.getBounds()),n.update(e)||this.removeChildNow(n)}return!0},draw(e,t){if(this.children.length>0){let i,n=e.getContext();this._emitter.textureAdditive&&(i=n.globalCompositeOperation,n.globalCompositeOperation="lighter"),me.Container.prototype.draw.apply(this,[e,t]),this._emitter.textureAdditive&&(n.globalCompositeOperation=i)}}}),window,me.Particle=me.Renderable.extend({init(e){me.Renderable.prototype.init.apply(this,[e.getRandomPointX(),e.getRandomPointY(),e.image.width,e.image.height]),this.alwaysUpdate=!0,this.image=e.image;const t=e.angle+(e.angleVariation>0?((0).randomFloat(2)-1)*e.angleVariation:0),i=e.speed+(e.speedVariation>0?((0).randomFloat(2)-1)*e.speedVariation:0);this.vel=new me.Vector2d(i*Math.cos(t),-i*Math.sin(t)),this.life=e.minLife.randomFloat(e.maxLife),this.startLife=this.life,this.startScale=e.minStartScale.randomFloat(e.maxStartScale).clamp(e.minStartScale,e.maxStartScale),this.endScale=e.minEndScale.randomFloat(e.maxEndScale).clamp(e.minEndScale,e.maxEndScale),this.gravity=e.gravity,this.wind=e.wind,this.followTrajectory=e.followTrajectory,this.onlyInViewport=e.onlyInViewport,this.pos.z=e.z,this._deltaInv=me.sys.fps/1e3,e.followTrajectory||(this.angle=e.minRotation.randomFloat(e.maxRotation))},update(e){const t=e*this._deltaInv;this.life=this.life>e?this.life-e:0;const i=this.life/this.startLife;let n=this.startScale;this.startScale>this.endScale?n=(n*=i)this.endScale?this.endScale:n),this.alpha=i,this.vel.x+=this.wind*t,this.vel.y+=this.gravity*t;const r=this.followTrajectory?Math.atan2(this.vel.y,this.vel.x):this.angle;return this.pos.x+=this.vel.x*t,this.pos.y+=this.vel.y*t,this.currentTransform.setTransform(n,0,0,0,n,0,this.pos.x,this.pos.y,1).rotate(r),(this.inViewport||!this.onlyInViewport)&&this.life>0},preDraw(e){e.save(),e.setGlobalAlpha(e.globalAlpha()*this.alpha),e.transform(this.currentTransform)},draw(e){let t=this.width,i=this.height;e.drawImage(this.image,0,0,t,i,-t/2,-i/2,t,i)}}),function(){me.debug=me.debug||{};const e=me.Object.extend({init(e){this.stats={},this.reset(e)},reset(e){const t=this;(e||Object.keys(this.stats)).forEach(e=>{t.stats[e]=0})},inc(e,t){this.stats[e]+=t||1},get(e){return this.stats[e]}});let t='info face="PressStart2P" size=10 bold=0 italic=0 charset= unicode= stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=0,0 outline=0\ncommon lineHeight=10 base=10 scaleW=128 scaleH=128 pages=1 packed=0\npage id=0 file="PressStart2P.png"\nchars count=95\nchar id=32 x=1 y=1 width=0 height=0 xoffset=0 yoffset=10 xadvance=10 page=0 chnl=15\nchar id=33 x=1 y=2 width=5 height=10 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=34 x=1 y=13 width=8 height=5 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=35 x=7 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=36 x=1 y=19 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=37 x=1 y=30 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=38 x=1 y=41 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=39 x=10 y=12 width=4 height=5 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=40 x=1 y=52 width=6 height=10 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=41 x=1 y=63 width=6 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=42 x=1 y=74 width=10 height=8 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15\nchar id=43 x=8 y=52 width=9 height=8 xoffset=1 yoffset=1 xadvance=10 page=0 chnl=15\nchar id=44 x=8 y=61 width=5 height=5 xoffset=1 yoffset=6 xadvance=10 page=0 chnl=15\nchar id=45 x=8 y=67 width=9 height=2 xoffset=1 yoffset=4 xadvance=10 page=0 chnl=15\nchar id=46 x=14 y=61 width=4 height=4 xoffset=3 yoffset=6 xadvance=10 page=0 chnl=15\nchar id=47 x=12 y=18 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=48 x=18 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=49 x=12 y=29 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=50 x=12 y=40 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=51 x=22 y=29 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=52 x=23 y=12 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=53 x=29 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=54 x=1 y=83 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=55 x=1 y=94 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=56 x=1 y=105 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=57 x=1 y=116 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=58 x=18 y=51 width=4 height=8 xoffset=3 yoffset=1 xadvance=10 page=0 chnl=15\nchar id=59 x=12 y=70 width=5 height=9 xoffset=1 yoffset=1 xadvance=10 page=0 chnl=15\nchar id=60 x=12 y=80 width=8 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=61 x=23 y=23 width=10 height=5 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=62 x=18 y=66 width=8 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=63 x=23 y=40 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=64 x=33 y=29 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=65 x=23 y=51 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=66 x=34 y=12 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=67 x=40 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=68 x=12 y=91 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=69 x=21 y=77 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=70 x=27 y=62 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=71 x=34 y=40 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=72 x=34 y=51 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=73 x=44 y=23 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=74 x=45 y=12 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=75 x=51 y=1 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=76 x=12 y=102 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=77 x=12 y=113 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=78 x=22 y=102 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=79 x=23 y=88 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=80 x=32 y=73 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=81 x=38 y=62 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=82 x=23 y=113 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=83 x=33 y=99 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=84 x=34 y=84 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=85 x=43 y=73 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=86 x=34 y=110 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=87 x=44 y=84 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=88 x=44 y=95 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=89 x=45 y=106 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=90 x=45 y=117 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=91 x=45 y=34 width=6 height=10 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=92 x=45 y=45 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=93 x=52 y=34 width=6 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=94 x=34 y=23 width=8 height=4 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=95 x=34 y=121 width=10 height=2 xoffset=0 yoffset=9 xadvance=10 page=0 chnl=15\nchar id=96 x=15 y=12 width=4 height=4 xoffset=4 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=97 x=54 y=23 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=98 x=56 y=12 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=99 x=62 y=1 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=100 x=49 y=56 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=101 x=56 y=45 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=102 x=59 y=31 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=103 x=54 y=67 width=10 height=9 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=104 x=60 y=54 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=105 x=67 y=42 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=106 x=67 y=9 width=8 height=11 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=107 x=69 y=21 width=10 height=10 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=108 x=76 y=1 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=109 x=76 y=12 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=110 x=69 y=32 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=111 x=86 y=1 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=112 x=97 y=1 width=10 height=9 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=113 x=108 y=1 width=10 height=9 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=114 x=87 y=10 width=9 height=8 xoffset=1 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=115 x=97 y=11 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=116 x=108 y=11 width=9 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=117 x=87 y=19 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=118 x=98 y=19 width=9 height=8 xoffset=1 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=119 x=80 y=27 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=120 x=108 y=22 width=10 height=8 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=121 x=91 y=28 width=10 height=9 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=122 x=80 y=35 width=10 height=7 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=123 x=118 y=11 width=6 height=10 xoffset=3 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=124 x=102 y=28 width=4 height=10 xoffset=4 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=125 x=119 y=22 width=6 height=10 xoffset=1 yoffset=0 xadvance=10 page=0 chnl=15\nchar id=126 x=91 y=38 width=10 height=5 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15\nchar id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15',i="data:image/png;base64,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";const n=me.Renderable.extend({init(n){this._super(me.Renderable,"init",[0,0,me.game.viewport.width,50]),this.isKinematic=!1,this.version="6.0.0",this.area={},this.counters=new e(["shapes","sprites","velocity","bounds","children"]),this.pos.z=1/0,this.visible=!1,this.frameUpdateTime=0,this.frameDrawTime=0,this.GUID=`debug-${me.utils.createGUID()}`,this.name="me.debugPanel",this.isPersistent=!0,this.floating=!0,this.isRenderable=!0,this.alwaysUpdate=!0,this.canvas=me.video.createCanvas(this.width,this.height,!0),this.font_size=10,this.mod=2,this.width<500&&(this.font_size=7,this.mod=this.mod*(this.font_size/10));const r=new Image;r.src=i,this.font=new me.BitmapFont(t,r),i=null,t=null;const o=10*this.mod;this.area.renderHitBox=new me.Rect(250,2,o,o),this.area.renderVelocity=new me.Rect(250,17,o,o),this.area.renderQuadTree=new me.Rect(410,2,o,o),me.debug.displayFPS=!0;const s=this;this.debugToggle=n||me.input.KEY.S,this.keyHandler=me.event.subscribe(me.event.KEYDOWN,(e,t)=>{t===s.debugToggle&&me.plugins.debugPanel.toggle()}),this.help_str=`[${String.fromCharCode(32+this.debugToggle)}]show/hide`,this.help_str_len=this.font.measureText(me.video.renderer,this.help_str).width,this.fps_str_len=this.font.measureText(me.video.renderer,"00/00 fps").width,this.memoryPositionX=325*this.mod,me.event.subscribe(me.event.VIEWPORT_ONRESIZE,e=>{s.resize(e,50)}),this.patchSystemFn(),this.anchorPoint.set(0,0)},patchSystemFn(){me.debug.renderHitBox=me.debug.renderHitBox||me.game.HASH.hitbox||!1,me.debug.renderVelocity=me.debug.renderVelocity||me.game.HASH.velocity||!1,me.debug.renderQuadTree=me.debug.renderQuadTree||me.game.HASH.quadtree||!1;const e=this,t=new me.Rect(0,0,0,0);me.plugin.patch(me.timer,"update",function(e){this._patched(e),me.timer.countFPS()}),me.plugin.patch(me.game,"update",function(t){const i=window.performance.now();this._patched(t),e.frameUpdateTime=window.performance.now()-i}),me.plugin.patch(me.game,"draw",function(){const t=window.performance.now();e.counters.reset(),this._patched(),e.frameDrawTime=window.performance.now()-t}),me.plugin.patch(me.Sprite,"draw",function(t){if(this._patched(t),e.visible&&(e.counters.inc("sprites"),me.debug.renderHitBox)){const r=this.getBounds();let o=this.anchorPoint.x*r.width,s=this.anchorPoint.y*r.height;if(t.translate(o,s),t.setColor("green"),t.drawShape(r),t.translate(-o,-s),this.body){t.translate(this.pos.x,this.pos.y),t.setColor("red");for(var i,n=this.body.shapes.length;n--,i=this.body.shapes[n];)t.drawShape(i),e.counters.inc("shapes")}}}),me.plugin.patch(me.Entity,"postDraw",function(i){if(e.visible){if(e.counters.inc("bounds"),me.debug.renderHitBox){i.save(),i.translate(-this.pos.x-this.body.pos.x-this.ancestor._absPos.x,-this.pos.y-this.body.pos.y-this.ancestor._absPos.y),this.renderable instanceof me.Renderable&&i.translate(-this.anchorPoint.x*this.body.width,-this.anchorPoint.y*this.body.height),i.setColor("orange"),i.drawShape(this.getBounds()),i.translate(this.pos.x+this.ancestor._absPos.x,this.pos.y+this.ancestor._absPos.y),i.setColor("red");for(var n,r=this.body.shapes.length;r--,n=this.body.shapes[r];)i.drawShape(n),e.counters.inc("shapes");i.restore()}if(me.debug.renderVelocity&&(this.body.vel.x||this.body.vel.y)){t.copy(this.getBounds()),t.pos.sub(this.ancestor._absPos);const n=t.width/2,r=t.height/2;i.save(),i.setLineWidth(1),i.setColor("blue"),i.translate(-n,-r),i.strokeLine(0,0,~~(this.body.vel.x*(t.width/2)),~~(this.body.vel.y*(t.height/2))),e.counters.inc("velocity"),i.restore()}}this._patched(i)}),me.plugin.patch(me.Container,"draw",function(i,n){this._patched(i,n),e.visible&&(e.counters.inc("bounds"),e.counters.inc("children"),me.debug.renderHitBox&&(i.save(),i.setLineWidth(1),i.setColor("orange"),t.copy(this.getBounds()),this.ancestor&&t.pos.sub(this.ancestor._absPos),i.drawShape(t),i.setColor("purple"),t.copy(this.childBounds),this.ancestor&&t.pos.sub(this.ancestor._absPos),i.drawShape(t),i.restore()))})},show(){this.visible||(me.game.world.addChild(this,1/0),me.input.registerPointerEvent("pointerdown",this,this.onClick.bind(this)),this.visible=!0,me.game.repaint())},hide(){this.visible&&(me.input.releasePointerEvent("pointerdown",this),me.game.world.removeChild(this,!0),this.visible=!1,me.game.repaint())},update(){return this.visible},onClick(e){this.area.renderHitBox.containsPoint(e.gameX,e.gameY)?me.debug.renderHitBox=!me.debug.renderHitBox:this.area.renderVelocity.containsPoint(e.gameX,e.gameY)?me.debug.renderVelocity=!me.debug.renderVelocity:this.area.renderQuadTree.containsPoint(e.gameX,e.gameY)&&(me.debug.renderQuadTree=!me.debug.renderQuadTree),me.game.repaint()},drawQuadTreeNode(e,t){const i=t.bounds;if(0===t.nodes.length){const n=.4*t.objects.length/me.collision.maxChildren;n>0&&(e.save(),e.setColor(`rgba(255,0,0,${n})`),e.fillRect(i.pos.x,i.pos.y,i.width,i.height),e.restore())}else for(let i=0;i0&&t-1 in e)}b.fn=b.prototype={jquery:"3.3.1",constructor:b,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return b.each(this,e)},map:function(e){return this.pushStack(b.map(this,function(t,i){return e.call(t,i,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,i=+e+(e<0?t:0);return this.pushStack(i>=0&&i+~]|"+N+")"+N+"*"),q=new RegExp("="+N+"*([^\\]'\"]*?)"+N+"*\\]","g"),Y=new RegExp(j),X=new RegExp("^"+L+"$"),W={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+F),PSEUDO:new RegExp("^"+j),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+N+"*(even|odd|(([+-]|)(\\d*)n|)"+N+"*(?:([+-]|)"+N+"*(\\d+)|))"+N+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+N+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+N+"*((?:-\\d)?\\d*)"+N+"*\\)|)(?=[^-]|$)","i")},K=/^(?:input|select|textarea|button)$/i,G=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Q=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+N+"?|("+N+")|.)","ig"),ee=function(e,t,i){var n="0x"+t-65536;return n!=n||i?t:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ne=function(){d()},re=ve(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{M.apply(P=B.call(x.childNodes),x.childNodes),P[x.childNodes.length].nodeType}catch(e){M={apply:P.length?function(e,t){R.apply(e,B.call(t))}:function(e,t){for(var i=e.length,n=0;e[i++]=t[n++];);e.length=i-1}}}function oe(e,t,n,r){var o,a,l,c,u,f,y,v=t&&t.ownerDocument,_=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==_&&9!==_&&11!==_)return n;if(!r&&((t?t.ownerDocument||t:x)!==p&&d(t),t=t||p,m)){if(11!==_&&(u=J.exec(e)))if(o=u[1]){if(9===_){if(!(l=t.getElementById(o)))return n;if(l.id===o)return n.push(l),n}else if(v&&(l=v.getElementById(o))&&w(t,l)&&l.id===o)return n.push(l),n}else{if(u[2])return M.apply(n,t.getElementsByTagName(e)),n;if((o=u[3])&&i.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(o)),n}if(i.qsa&&!C[e+" "]&&(!g||!g.test(e))){if(1!==_)v=t,y=e;else if("object"!==t.nodeName.toLowerCase()){for((c=t.getAttribute("id"))?c=c.replace(te,ie):t.setAttribute("id",c=b),a=(f=s(e)).length;a--;)f[a]="#"+c+" "+ye(f[a]);y=f.join(","),v=Q.test(e)&&me(t.parentNode)||t}if(y)try{return M.apply(n,v.querySelectorAll(y)),n}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return h(e.replace(V,"$1"),t,n,r)}function se(){var e=[];return function t(i,r){return e.push(i+" ")>n.cacheLength&&delete t[e.shift()],t[i+" "]=r}}function ae(e){return e[b]=!0,e}function he(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){for(var i=e.split("|"),r=i.length;r--;)n.attrHandle[i[r]]=t}function ce(e,t){var i=t&&e,n=i&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(n)return n;if(i)for(;i=i.nextSibling;)if(i===t)return-1;return e?1:-1}function ue(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function de(e){return function(t){var i=t.nodeName.toLowerCase();return("input"===i||"button"===i)&&t.type===e}}function pe(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&re(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function fe(e){return ae(function(t){return t=+t,ae(function(i,n){for(var r,o=e([],i.length,t),s=o.length;s--;)i[r=o[s]]&&(i[r]=!(n[r]=i[r]))})})}function me(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in i=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},d=oe.setDocument=function(e){var t,r,s=e?e.ownerDocument||e:x;return s!==p&&9===s.nodeType&&s.documentElement?(f=(p=s).documentElement,m=!o(p),x!==p&&(r=p.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",ne,!1):r.attachEvent&&r.attachEvent("onunload",ne)),i.attributes=he(function(e){return e.className="i",!e.getAttribute("className")}),i.getElementsByTagName=he(function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length}),i.getElementsByClassName=$.test(p.getElementsByClassName),i.getById=he(function(e){return f.appendChild(e).id=b,!p.getElementsByName||!p.getElementsByName(b).length}),i.getById?(n.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},n.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var i=t.getElementById(e);return i?[i]:[]}}):(n.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var i=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return i&&i.value===t}},n.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var i,n,r,o=t.getElementById(e);if(o){if((i=o.getAttributeNode("id"))&&i.value===e)return[o];for(r=t.getElementsByName(e),n=0;o=r[n++];)if((i=o.getAttributeNode("id"))&&i.value===e)return[o]}return[]}}),n.find.TAG=i.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):i.qsa?t.querySelectorAll(e):void 0}:function(e,t){var i,n=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;i=o[r++];)1===i.nodeType&&n.push(i);return n}return o},n.find.CLASS=i.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},y=[],g=[],(i.qsa=$.test(p.querySelectorAll))&&(he(function(e){f.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+N+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+N+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+b+"-]").length||g.push("~="),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||g.push(".#.+[+~]")}),he(function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+N+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),f.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(i.matchesSelector=$.test(v=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&he(function(e){i.disconnectedMatch=v.call(e,"*"),v.call(e,"[s!='']:x"),y.push("!=",j)}),g=g.length&&new RegExp(g.join("|")),y=y.length&&new RegExp(y.join("|")),t=$.test(f.compareDocumentPosition),w=t||$.test(f.contains)?function(e,t){var i=9===e.nodeType?e.documentElement:e,n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(i.contains?i.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},S=t?function(e,t){if(e===t)return u=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!i.sortDetached&&t.compareDocumentPosition(e)===n?e===p||e.ownerDocument===x&&w(x,e)?-1:t===p||t.ownerDocument===x&&w(x,t)?1:c?D(c,e)-D(c,t):0:4&n?-1:1)}:function(e,t){if(e===t)return u=!0,0;var i,n=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e===p?-1:t===p?1:r?-1:o?1:c?D(c,e)-D(c,t):0;if(r===o)return ce(e,t);for(i=e;i=i.parentNode;)s.unshift(i);for(i=t;i=i.parentNode;)a.unshift(i);for(;s[n]===a[n];)n++;return n?ce(s[n],a[n]):s[n]===x?-1:a[n]===x?1:0},p):p},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&d(e),t=t.replace(q,"='$1']"),i.matchesSelector&&m&&!C[t+" "]&&(!y||!y.test(t))&&(!g||!g.test(t)))try{var n=v.call(e,t);if(n||i.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return oe(t,p,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==p&&d(e),w(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==p&&d(e);var r=n.attrHandle[t.toLowerCase()],o=r&&k.call(n.attrHandle,t.toLowerCase())?r(e,t,!m):void 0;return void 0!==o?o:i.attributes||!m?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ie)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,n=[],r=0,o=0;if(u=!i.detectDuplicates,c=!i.sortStable&&e.slice(0),e.sort(S),u){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return c=null,e},r=oe.getText=function(e){var t,i="",n=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)i+=r(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[n++];)i+=r(t);return i},(n=oe.selectors={cacheLength:50,createPseudo:ae,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,i=!e[6]&&e[2];return W.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":i&&Y.test(i)&&(t=s(i,!0))&&(t=i.indexOf(")",i.length-t)-i.length)&&(e[0]=e[0].slice(0,t),e[2]=i.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+N+")"+e+"("+N+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,i){return function(n){var r=oe.attr(n,e);return null==r?"!="===t:!t||(r+="","="===t?r===i:"!="===t?r!==i:"^="===t?i&&0===r.indexOf(i):"*="===t?i&&r.indexOf(i)>-1:"$="===t?i&&r.slice(-i.length)===i:"~="===t?(" "+r.replace(U," ")+" ").indexOf(i)>-1:"|="===t&&(r===i||r.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,i,n,r){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===n&&0===r?function(e){return!!e.parentNode}:function(t,i,h){var l,c,u,d,p,f,m=o!==s?"nextSibling":"previousSibling",g=t.parentNode,y=a&&t.nodeName.toLowerCase(),v=!h&&!a,w=!1;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(a?d.nodeName.toLowerCase()===y:1===d.nodeType)return!1;f=m="only"===e&&!f&&"nextSibling"}return!0}if(f=[s?g.firstChild:g.lastChild],s&&v){for(w=(p=(l=(c=(u=(d=g)[b]||(d[b]={}))[d.uniqueID]||(u[d.uniqueID]={}))[e]||[])[0]===_&&l[1])&&l[2],d=p&&g.childNodes[p];d=++p&&d&&d[m]||(w=p=0)||f.pop();)if(1===d.nodeType&&++w&&d===t){c[e]=[_,p,w];break}}else if(v&&(w=p=(l=(c=(u=(d=t)[b]||(d[b]={}))[d.uniqueID]||(u[d.uniqueID]={}))[e]||[])[0]===_&&l[1]),!1===w)for(;(d=++p&&d&&d[m]||(w=p=0)||f.pop())&&((a?d.nodeName.toLowerCase()!==y:1!==d.nodeType)||!++w||(v&&((c=(u=d[b]||(d[b]={}))[d.uniqueID]||(u[d.uniqueID]={}))[e]=[_,w]),d!==t)););return(w-=r)===n||w%n==0&&w/n>=0}}},PSEUDO:function(e,t){var i,r=n.pseudos[e]||n.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(i=[e,e,"",t],n.setFilters.hasOwnProperty(e.toLowerCase())?ae(function(e,i){for(var n,o=r(e,t),s=o.length;s--;)e[n=D(e,o[s])]=!(i[n]=o[s])}):function(e){return r(e,0,i)}):r}},pseudos:{not:ae(function(e){var t=[],i=[],n=a(e.replace(V,"$1"));return n[b]?ae(function(e,t,i,r){for(var o,s=n(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,n(t,null,o,i),t[0]=null,!i.pop()}}),has:ae(function(e){return function(t){return oe(e,t).length>0}}),contains:ae(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||r(t)).indexOf(e)>-1}}),lang:ae(function(e){return X.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var i;do{if(i=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(i=i.toLowerCase())===e||0===i.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var i=e.location&&e.location.hash;return i&&i.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:pe(!1),disabled:pe(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!n.pseudos.empty(e)},header:function(e){return G.test(e.nodeName)},input:function(e){return K.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:fe(function(){return[0]}),last:fe(function(e,t){return[t-1]}),eq:fe(function(e,t,i){return[i<0?i+t:i]}),even:fe(function(e,t){for(var i=0;i=0;)e.push(n);return e}),gt:fe(function(e,t,i){for(var n=i<0?i+t:i;++n1?function(t,i,n){for(var r=e.length;r--;)if(!e[r](t,i,n))return!1;return!0}:e[0]}function be(e,t,i,n,r){for(var o,s=[],a=0,h=e.length,l=null!=t;a-1&&(o[l]=!(s[l]=u))}}else y=be(y===s?y.splice(f,y.length):y),r?r(null,s,y,h):M.apply(s,y)})}function _e(e){for(var t,i,r,o=e.length,s=n.relative[e[0].type],a=s||n.relative[" "],h=s?1:0,c=ve(function(e){return e===t},a,!0),u=ve(function(e){return D(t,e)>-1},a,!0),d=[function(e,i,n){var r=!s&&(n||i!==l)||((t=i).nodeType?c(e,i,n):u(e,i,n));return t=null,r}];h1&&we(d),h>1&&ye(e.slice(0,h-1).concat({value:" "===e[h-2].type?"*":""})).replace(V,"$1"),i,h0,r=e.length>0,o=function(o,s,a,h,c){var u,f,g,y=0,v="0",w=o&&[],b=[],x=l,T=o||r&&n.find.TAG("*",c),E=_+=null==x?1:Math.random()||.1,A=T.length;for(c&&(l=s===p||s||c);v!==A&&null!=(u=T[v]);v++){if(r&&u){for(f=0,s||u.ownerDocument===p||(d(u),a=!m);g=e[f++];)if(g(u,s||p,a)){h.push(u);break}c&&(_=E)}i&&((u=!g&&u)&&y--,o&&w.push(u))}if(y+=v,i&&v!==y){for(f=0;g=t[f++];)g(w,b,s,a);if(o){if(y>0)for(;v--;)w[v]||b[v]||(b[v]=O.call(h));b=be(b)}M.apply(h,b),c&&!o&&b.length>0&&y+t.length>1&&oe.uniqueSort(h)}return c&&(_=E,l=x),w};return i?ae(o):o}return ge.prototype=n.filters=n.pseudos,n.setFilters=new ge,s=oe.tokenize=function(e,t){var i,r,o,s,a,h,l,c=A[e+" "];if(c)return t?0:c.slice(0);for(a=e,h=[],l=n.preFilter;a;){for(s in i&&!(r=z.exec(a))||(r&&(a=a.slice(r[0].length)||a),h.push(o=[])),i=!1,(r=H.exec(a))&&(i=r.shift(),o.push({value:i,type:r[0].replace(V," ")}),a=a.slice(i.length)),n.filter)!(r=W[s].exec(a))||l[s]&&!(r=l[s](r))||(i=r.shift(),o.push({value:i,type:s,matches:r}),a=a.slice(i.length));if(!i)break}return t?a.length:a?oe.error(e):A(e,h).slice(0)},a=oe.compile=function(e,t){var i,n=[],r=[],o=C[e+" "];if(!o){for(t||(t=s(e)),i=t.length;i--;)(o=_e(t[i]))[b]?n.push(o):r.push(o);(o=C(e,Te(r,n))).selector=e}return o},h=oe.select=function(e,t,i,r){var o,h,l,c,u,d="function"==typeof e&&e,p=!r&&s(e=d.selector||e);if(i=i||[],1===p.length){if((h=p[0]=p[0].slice(0)).length>2&&"ID"===(l=h[0]).type&&9===t.nodeType&&m&&n.relative[h[1].type]){if(!(t=(n.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return i;d&&(t=t.parentNode),e=e.slice(h.shift().value.length)}for(o=W.needsContext.test(e)?0:h.length;o--&&(l=h[o],!n.relative[c=l.type]);)if((u=n.find[c])&&(r=u(l.matches[0].replace(Z,ee),Q.test(h[0].type)&&me(t.parentNode)||t))){if(h.splice(o,1),!(e=r.length&&ye(h)))return M.apply(i,r),i;break}}return(d||a(e,p))(r,t,!m,i,!t||Q.test(e)&&me(t.parentNode)||t),i},i.sortStable=b.split("").sort(S).join("")===b,i.detectDuplicates=!!u,d(),i.sortDetached=he(function(e){return 1&e.compareDocumentPosition(p.createElement("fieldset"))}),he(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,i){if(!i)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),i.attributes&&he(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,i){if(!i&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),he(function(e){return null==e.getAttribute("disabled")})||le(I,function(e,t,i){var n;if(!i)return!0===e[t]?t.toLowerCase():(n=e.getAttributeNode(t))&&n.specified?n.value:null}),oe}(e);b.find=T,b.expr=T.selectors,b.expr[":"]=b.expr.pseudos,b.uniqueSort=b.unique=T.uniqueSort,b.text=T.getText,b.isXMLDoc=T.isXML,b.contains=T.contains,b.escapeSelector=T.escape;var E=function(e,t,i){for(var n=[],r=void 0!==i;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&b(e).is(i))break;n.push(e)}return n},A=function(e,t){for(var i=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&i.push(e);return i},C=b.expr.match.needsContext;function S(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var k=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function P(e,t,i){return m(t)?b.grep(e,function(e,n){return!!t.call(e,n,e)!==i}):t.nodeType?b.grep(e,function(e){return e===t!==i}):"string"!=typeof t?b.grep(e,function(e){return h.call(t,e)>-1!==i}):b.filter(t,e,i)}b.filter=function(e,t,i){var n=t[0];return i&&(e=":not("+e+")"),1===t.length&&1===n.nodeType?b.find.matchesSelector(n,e)?[n]:[]:b.find.matches(e,b.grep(t,function(e){return 1===e.nodeType}))},b.fn.extend({find:function(e){var t,i,n=this.length,r=this;if("string"!=typeof e)return this.pushStack(b(e).filter(function(){for(t=0;t1?b.uniqueSort(i):i},filter:function(e){return this.pushStack(P(this,e||[],!1))},not:function(e){return this.pushStack(P(this,e||[],!0))},is:function(e){return!!P(this,"string"==typeof e&&C.test(e)?b(e):e||[],!1).length}});var O,R=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(b.fn.init=function(e,t,i){var r,o;if(!e)return this;if(i=i||O,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:R.exec(e))||!r[1]&&t)return!t||t.jquery?(t||i).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof b?t[0]:t,b.merge(this,b.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:n,!0)),k.test(r[1])&&b.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(o=n.getElementById(r[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==i.ready?i.ready(e):e(b):b.makeArray(e,this)}).prototype=b.fn,O=b(n);var M=/^(?:parents|prev(?:Until|All))/,B={children:!0,contents:!0,next:!0,prev:!0};function D(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}b.fn.extend({has:function(e){var t=b(e,this),i=t.length;return this.filter(function(){for(var e=0;e-1:1===i.nodeType&&b.find.matchesSelector(i,e))){o.push(i);break}return this.pushStack(o.length>1?b.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?h.call(b(e),this[0]):h.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(b.uniqueSort(b.merge(this.get(),b(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return E(e,"parentNode")},parentsUntil:function(e,t,i){return E(e,"parentNode",i)},next:function(e){return D(e,"nextSibling")},prev:function(e){return D(e,"previousSibling")},nextAll:function(e){return E(e,"nextSibling")},prevAll:function(e){return E(e,"previousSibling")},nextUntil:function(e,t,i){return E(e,"nextSibling",i)},prevUntil:function(e,t,i){return E(e,"previousSibling",i)},siblings:function(e){return A((e.parentNode||{}).firstChild,e)},children:function(e){return A(e.firstChild)},contents:function(e){return S(e,"iframe")?e.contentDocument:(S(e,"template")&&(e=e.content||e),b.merge([],e.childNodes))}},function(e,t){b.fn[e]=function(i,n){var r=b.map(this,t,i);return"Until"!==e.slice(-5)&&(n=i),n&&"string"==typeof n&&(r=b.filter(n,r)),this.length>1&&(B[e]||b.uniqueSort(r),M.test(e)&&r.reverse()),this.pushStack(r)}});var I=/[^\x20\t\r\n\f]+/g;function N(e){return e}function L(e){throw e}function F(e,t,i,n){var r;try{e&&m(r=e.promise)?r.call(e).done(t).fail(i):e&&m(r=e.then)?r.call(e,t,i):t.apply(void 0,[e].slice(n))}catch(e){i.apply(void 0,[e])}}b.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return b.each(e.match(I)||[],function(e,i){t[i]=!0}),t}(e):b.extend({},e);var t,i,n,r,o=[],s=[],a=-1,h=function(){for(r=r||e.once,n=t=!0;s.length;a=-1)for(i=s.shift();++a-1;)o.splice(i,1),i<=a&&a--}),this},has:function(e){return e?b.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=s=[],o=i="",this},disabled:function(){return!o},lock:function(){return r=s=[],i||t||(o=i=""),this},locked:function(){return!!r},fireWith:function(e,i){return r||(i=[e,(i=i||[]).slice?i.slice():i],s.push(i),t||h()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!n}};return l},b.extend({Deferred:function(t){var i=[["notify","progress",b.Callbacks("memory"),b.Callbacks("memory"),2],["resolve","done",b.Callbacks("once memory"),b.Callbacks("once memory"),0,"resolved"],["reject","fail",b.Callbacks("once memory"),b.Callbacks("once memory"),1,"rejected"]],n="pending",r={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return r.then(null,e)},pipe:function(){var e=arguments;return b.Deferred(function(t){b.each(i,function(i,n){var r=m(e[n[4]])&&e[n[4]];o[n[1]](function(){var e=r&&r.apply(this,arguments);e&&m(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[n[0]+"With"](this,r?[e]:arguments)})}),e=null}).promise()},then:function(t,n,r){var o=0;function s(t,i,n,r){return function(){var a=this,h=arguments,l=function(){var e,l;if(!(t=o&&(n!==L&&(a=void 0,h=[e]),i.rejectWith(a,h))}};t?c():(b.Deferred.getStackHook&&(c.stackTrace=b.Deferred.getStackHook()),e.setTimeout(c))}}return b.Deferred(function(e){i[0][3].add(s(0,e,m(r)?r:N,e.notifyWith)),i[1][3].add(s(0,e,m(t)?t:N)),i[2][3].add(s(0,e,m(n)?n:L))}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},o={};return b.each(i,function(e,t){var s=t[2],a=t[5];r[t[1]]=s.add,a&&s.add(function(){n=a},i[3-e][2].disable,i[3-e][3].disable,i[0][2].lock,i[0][3].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),r.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,i=t,n=Array(i),r=o.call(arguments),s=b.Deferred(),a=function(e){return function(i){n[e]=this,r[e]=arguments.length>1?o.call(arguments):i,--t||s.resolveWith(n,r)}};if(t<=1&&(F(e,s.done(a(i)).resolve,s.reject,!t),"pending"===s.state()||m(r[i]&&r[i].then)))return s.then();for(;i--;)F(r[i],a(i),s.reject);return s.promise()}});var j=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;b.Deferred.exceptionHook=function(t,i){e.console&&e.console.warn&&t&&j.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,i)},b.readyException=function(t){e.setTimeout(function(){throw t})};var U=b.Deferred();function V(){n.removeEventListener("DOMContentLoaded",V),e.removeEventListener("load",V),b.ready()}b.fn.ready=function(e){return U.then(e).catch(function(e){b.readyException(e)}),this},b.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--b.readyWait:b.isReady)||(b.isReady=!0,!0!==e&&--b.readyWait>0||U.resolveWith(n,[b]))}}),b.ready.then=U.then,"complete"===n.readyState||"loading"!==n.readyState&&!n.documentElement.doScroll?e.setTimeout(b.ready):(n.addEventListener("DOMContentLoaded",V),e.addEventListener("load",V));var z=function(e,t,i,n,r,o,s){var a=0,h=e.length,l=null==i;if("object"===w(i))for(a in r=!0,i)z(e,t,a,i[a],!0,o,s);else if(void 0!==n&&(r=!0,m(n)||(s=!0),l&&(s?(t.call(e,n),t=null):(l=t,t=function(e,t,i){return l.call(b(e),i)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){$.remove(this,e)})}}),b.extend({queue:function(e,t,i){var n;if(e)return t=(t||"fx")+"queue",n=G.get(e,t),i&&(!n||Array.isArray(i)?n=G.access(e,t,b.makeArray(i)):n.push(i)),n||[]},dequeue:function(e,t){t=t||"fx";var i=b.queue(e,t),n=i.length,r=i.shift(),o=b._queueHooks(e,t);"inprogress"===r&&(r=i.shift(),n--),r&&("fx"===t&&i.unshift("inprogress"),delete o.stop,r.call(e,function(){b.dequeue(e,t)},o)),!n&&o&&o.empty.fire()},_queueHooks:function(e,t){var i=t+"queueHooks";return G.get(e,i)||G.access(e,i,{empty:b.Callbacks("once memory").add(function(){G.remove(e,[t+"queue",i])})})}}),b.fn.extend({queue:function(e,t){var i=2;return"string"!=typeof e&&(t=e,e="fx",i--),arguments.length\x20\t\r\n\f]+)/i,ue=/^$|^module$|\/(?:java|ecma)script/i,de={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function pe(e,t){var i;return i=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?b.merge([e],i):i}function fe(e,t){for(var i=0,n=e.length;i-1)r&&r.push(o);else if(l=b.contains(o.ownerDocument,o),s=pe(u.appendChild(o),"script"),l&&fe(s),i)for(c=0;o=s[c++];)ue.test(o.type||"")&&i.push(o);return u}!function(){var e=n.createDocumentFragment().appendChild(n.createElement("div")),t=n.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),f.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",f.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var ye=n.documentElement,ve=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,be=/^([^.]*)(?:\.(.+)|)/;function xe(){return!0}function _e(){return!1}function Te(){try{return n.activeElement}catch(e){}}function Ee(e,t,i,n,r,o){var s,a;if("object"==typeof t){for(a in"string"!=typeof i&&(n=n||i,i=void 0),t)Ee(e,a,i,n,t[a],o);return e}if(null==n&&null==r?(r=i,n=i=void 0):null==r&&("string"==typeof i?(r=n,n=void 0):(r=n,n=i,i=void 0)),!1===r)r=_e;else if(!r)return e;return 1===o&&(s=r,(r=function(e){return b().off(e),s.apply(this,arguments)}).guid=s.guid||(s.guid=b.guid++)),e.each(function(){b.event.add(this,t,r,n,i)})}b.event={global:{},add:function(e,t,i,n,r){var o,s,a,h,l,c,u,d,p,f,m,g=G.get(e);if(g)for(i.handler&&(i=(o=i).handler,r=o.selector),r&&b.find.matchesSelector(ye,r),i.guid||(i.guid=b.guid++),(h=g.events)||(h=g.events={}),(s=g.handle)||(s=g.handle=function(t){return void 0!==b&&b.event.triggered!==t.type?b.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(I)||[""]).length;l--;)p=m=(a=be.exec(t[l])||[])[1],f=(a[2]||"").split(".").sort(),p&&(u=b.event.special[p]||{},p=(r?u.delegateType:u.bindType)||p,u=b.event.special[p]||{},c=b.extend({type:p,origType:m,data:n,handler:i,guid:i.guid,selector:r,needsContext:r&&b.expr.match.needsContext.test(r),namespace:f.join(".")},o),(d=h[p])||((d=h[p]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(e,n,f,s)||e.addEventListener&&e.addEventListener(p,s)),u.add&&(u.add.call(e,c),c.handler.guid||(c.handler.guid=i.guid)),r?d.splice(d.delegateCount++,0,c):d.push(c),b.event.global[p]=!0)},remove:function(e,t,i,n,r){var o,s,a,h,l,c,u,d,p,f,m,g=G.hasData(e)&&G.get(e);if(g&&(h=g.events)){for(l=(t=(t||"").match(I)||[""]).length;l--;)if(p=m=(a=be.exec(t[l])||[])[1],f=(a[2]||"").split(".").sort(),p){for(u=b.event.special[p]||{},d=h[p=(n?u.delegateType:u.bindType)||p]||[],a=a[2]&&new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)c=d[o],!r&&m!==c.origType||i&&i.guid!==c.guid||a&&!a.test(c.namespace)||n&&n!==c.selector&&("**"!==n||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,u.remove&&u.remove.call(e,c));s&&!d.length&&(u.teardown&&!1!==u.teardown.call(e,f,g.handle)||b.removeEvent(e,p,g.handle),delete h[p])}else for(p in h)b.event.remove(e,p+t[l],i,n,!0);b.isEmptyObject(h)&&G.remove(e,"handle events")}},dispatch:function(e){var t,i,n,r,o,s,a=b.event.fix(e),h=new Array(arguments.length),l=(G.get(this,"events")||{})[a.type]||[],c=b.event.special[a.type]||{};for(h[0]=a,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],s={},i=0;i-1:b.find(r,this,null,[l]).length),s[r]&&o.push(n);o.length&&a.push({elem:l,handlers:o})}return l=this,h\x20\t\r\n\f]*)[^>]*)\/>/gi,Ce=/\s*$/g;function Pe(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&b(e).children("tbody")[0]||e}function Oe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var i,n,r,o,s,a,h,l;if(1===t.nodeType){if(G.hasData(e)&&(o=G.access(e),s=G.set(t,o),l=o.events))for(r in delete s.handle,s.events={},l)for(i=0,n=l[r].length;i1&&"string"==typeof g&&!f.checkClone&&Se.test(g))return e.each(function(r){var o=e.eq(r);y&&(t[0]=g.call(this,r,o.html())),De(o,t,i,n)});if(d&&(o=(r=ge(t,e[0].ownerDocument,!1,e,n)).firstChild,1===r.childNodes.length&&(r=o),o||n)){for(h=(a=b.map(pe(r,"script"),Oe)).length;u")},clone:function(e,t,i){var n,r,o,s,a=e.cloneNode(!0),h=b.contains(e.ownerDocument,e);if(!(f.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(s=pe(a),n=0,r=(o=pe(e)).length;n0&&fe(s,!h&&pe(e,"script")),a},cleanData:function(e){for(var t,i,n,r=b.event.special,o=0;void 0!==(i=e[o]);o++)if(W(i)){if(t=i[G.expando]){if(t.events)for(n in t.events)r[n]?b.event.remove(i,n):b.removeEvent(i,n,t.handle);i[G.expando]=void 0}i[$.expando]&&(i[$.expando]=void 0)}}}),b.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?b.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return De(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Pe(this,e).appendChild(e)})},prepend:function(){return De(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Pe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return De(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return De(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(b.cleanData(pe(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},i=0,n=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ce.test(e)&&!de[(ce.exec(e)||["",""])[1].toLowerCase()]){e=b.htmlPrefilter(e);try{for(;i=0&&(h+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-h-a-.5))),h}function $e(e,t,i){var n=Le(e),r=je(e,t,n),o="border-box"===b.css(e,"boxSizing",!1,n),s=o;if(Ne.test(r)){if(!i)return r;r="auto"}return s=s&&(f.boxSizingReliable()||r===e.style[t]),("auto"===r||!parseFloat(r)&&"inline"===b.css(e,"display",!1,n))&&(r=e["offset"+t[0].toUpperCase()+t.slice(1)],s=!0),(r=parseFloat(r)||0)+Ge(e,t,i||(o?"border":"content"),s,n,r)+"px"}function Je(e,t,i,n,r){return new Je.prototype.init(e,t,i,n,r)}b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var i=je(e,"opacity");return""===i?"1":i}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,i,n){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,o,s,a=X(t),h=ze.test(t),l=e.style;if(h||(t=We(a)),s=b.cssHooks[t]||b.cssHooks[a],void 0===i)return s&&"get"in s&&void 0!==(r=s.get(e,!1,n))?r:l[t];"string"==(o=typeof i)&&(r=te.exec(i))&&r[1]&&(i=oe(e,t,r),o="number"),null!=i&&i==i&&("number"===o&&(i+=r&&r[3]||(b.cssNumber[a]?"":"px")),f.clearCloneStyle||""!==i||0!==t.indexOf("background")||(l[t]="inherit"),s&&"set"in s&&void 0===(i=s.set(e,i,n))||(h?l.setProperty(t,i):l[t]=i))}},css:function(e,t,i,n){var r,o,s,a=X(t);return ze.test(t)||(t=We(a)),(s=b.cssHooks[t]||b.cssHooks[a])&&"get"in s&&(r=s.get(e,!0,i)),void 0===r&&(r=je(e,t,n)),"normal"===r&&t in qe&&(r=qe[t]),""===i||i?(o=parseFloat(r),!0===i||isFinite(o)?o||0:r):r}}),b.each(["height","width"],function(e,t){b.cssHooks[t]={get:function(e,i,n){if(i)return!Ve.test(b.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?$e(e,t,n):re(e,He,function(){return $e(e,t,n)})},set:function(e,i,n){var r,o=Le(e),s="border-box"===b.css(e,"boxSizing",!1,o),a=n&&Ge(e,t,n,s,o);return s&&f.scrollboxSize()===o.position&&(a-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ge(e,t,"border",!1,o)-.5)),a&&(r=te.exec(i))&&"px"!==(r[3]||"px")&&(e.style[t]=i,i=b.css(e,t)),Ke(0,i,a)}}}),b.cssHooks.marginLeft=Ue(f.reliableMarginLeft,function(e,t){if(t)return(parseFloat(je(e,"marginLeft"))||e.getBoundingClientRect().left-re(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(i){for(var n=0,r={},o="string"==typeof i?i.split(" "):[i];n<4;n++)r[e+ie[n]+t]=o[n]||o[n-2]||o[0];return r}},"margin"!==e&&(b.cssHooks[e+t].set=Ke)}),b.fn.extend({css:function(e,t){return z(this,function(e,t,i){var n,r,o={},s=0;if(Array.isArray(t)){for(n=Le(e),r=t.length;s1)}}),b.Tween=Je,Je.prototype={constructor:Je,init:function(e,t,i,n,r,o){this.elem=e,this.prop=i,this.easing=r||b.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=n,this.unit=o||(b.cssNumber[i]?"":"px")},cur:function(){var e=Je.propHooks[this.prop];return e&&e.get?e.get(this):Je.propHooks._default.get(this)},run:function(e){var t,i=Je.propHooks[this.prop];return this.options.duration?this.pos=t=b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),i&&i.set?i.set(this):Je.propHooks._default.set(this),this}},Je.prototype.init.prototype=Je.prototype,Je.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=b.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[b.cssProps[e.prop]]&&!b.cssHooks[e.prop]?e.elem[e.prop]=e.now:b.style(e.elem,e.prop,e.now+e.unit)}}},Je.propHooks.scrollTop=Je.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},b.fx=Je.prototype.init,b.fx.step={};var Qe,Ze,et=/^(?:toggle|show|hide)$/,tt=/queueHooks$/;function it(){Ze&&(!1===n.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(it):e.setTimeout(it,b.fx.interval),b.fx.tick())}function nt(){return e.setTimeout(function(){Qe=void 0}),Qe=Date.now()}function rt(e,t){var i,n=0,r={height:e};for(t=t?1:0;n<4;n+=2-t)r["margin"+(i=ie[n])]=r["padding"+i]=e;return t&&(r.opacity=r.width=e),r}function ot(e,t,i){for(var n,r=(st.tweeners[t]||[]).concat(st.tweeners["*"]),o=0,s=r.length;o1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})}}),b.extend({attr:function(e,t,i){var n,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?b.prop(e,t,i):(1===o&&b.isXMLDoc(e)||(r=b.attrHooks[t.toLowerCase()]||(b.expr.match.bool.test(t)?at:void 0)),void 0!==i?null===i?void b.removeAttr(e,t):r&&"set"in r&&void 0!==(n=r.set(e,i,t))?n:(e.setAttribute(t,i+""),i):r&&"get"in r&&null!==(n=r.get(e,t))?n:null==(n=b.find.attr(e,t))?void 0:n)},attrHooks:{type:{set:function(e,t){if(!f.radioValue&&"radio"===t&&S(e,"input")){var i=e.value;return e.setAttribute("type",t),i&&(e.value=i),t}}}},removeAttr:function(e,t){var i,n=0,r=t&&t.match(I);if(r&&1===e.nodeType)for(;i=r[n++];)e.removeAttribute(i)}}),at={set:function(e,t,i){return!1===t?b.removeAttr(e,i):e.setAttribute(i,i),i}},b.each(b.expr.match.bool.source.match(/\w+/g),function(e,t){var i=ht[t]||b.find.attr;ht[t]=function(e,t,n){var r,o,s=t.toLowerCase();return n||(o=ht[s],ht[s]=r,r=null!=i(e,t,n)?s:null,ht[s]=o),r}});var lt=/^(?:input|select|textarea|button)$/i,ct=/^(?:a|area)$/i;function ut(e){return(e.match(I)||[]).join(" ")}function dt(e){return e.getAttribute&&e.getAttribute("class")||""}function pt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(I)||[]}b.fn.extend({prop:function(e,t){return z(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[b.propFix[e]||e]})}}),b.extend({prop:function(e,t,i){var n,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&b.isXMLDoc(e)||(t=b.propFix[t]||t,r=b.propHooks[t]),void 0!==i?r&&"set"in r&&void 0!==(n=r.set(e,i,t))?n:e[t]=i:r&&"get"in r&&null!==(n=r.get(e,t))?n:e[t]},propHooks:{tabIndex:{get:function(e){var t=b.find.attr(e,"tabindex");return t?parseInt(t,10):lt.test(e.nodeName)||ct.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),f.optSelected||(b.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),b.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){b.propFix[this.toLowerCase()]=this}),b.fn.extend({addClass:function(e){var t,i,n,r,o,s,a,h=0;if(m(e))return this.each(function(t){b(this).addClass(e.call(this,t,dt(this)))});if((t=pt(e)).length)for(;i=this[h++];)if(r=dt(i),n=1===i.nodeType&&" "+ut(r)+" "){for(s=0;o=t[s++];)n.indexOf(" "+o+" ")<0&&(n+=o+" ");r!==(a=ut(n))&&i.setAttribute("class",a)}return this},removeClass:function(e){var t,i,n,r,o,s,a,h=0;if(m(e))return this.each(function(t){b(this).removeClass(e.call(this,t,dt(this)))});if(!arguments.length)return this.attr("class","");if((t=pt(e)).length)for(;i=this[h++];)if(r=dt(i),n=1===i.nodeType&&" "+ut(r)+" "){for(s=0;o=t[s++];)for(;n.indexOf(" "+o+" ")>-1;)n=n.replace(" "+o+" "," ");r!==(a=ut(n))&&i.setAttribute("class",a)}return this},toggleClass:function(e,t){var i=typeof e,n="string"===i||Array.isArray(e);return"boolean"==typeof t&&n?t?this.addClass(e):this.removeClass(e):m(e)?this.each(function(i){b(this).toggleClass(e.call(this,i,dt(this),t),t)}):this.each(function(){var t,r,o,s;if(n)for(r=0,o=b(this),s=pt(e);t=s[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==i||((t=dt(this))&&G.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":G.get(this,"__className__")||""))})},hasClass:function(e){var t,i,n=0;for(t=" "+e+" ";i=this[n++];)if(1===i.nodeType&&(" "+ut(dt(i))+" ").indexOf(t)>-1)return!0;return!1}});var ft=/\r/g;b.fn.extend({val:function(e){var t,i,n,r=this[0];return arguments.length?(n=m(e),this.each(function(i){var r;1===this.nodeType&&(null==(r=n?e.call(this,i,b(this).val()):e)?r="":"number"==typeof r?r+="":Array.isArray(r)&&(r=b.map(r,function(e){return null==e?"":e+""})),(t=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))})):r?(t=b.valHooks[r.type]||b.valHooks[r.nodeName.toLowerCase()])&&"get"in t&&void 0!==(i=t.get(r,"value"))?i:"string"==typeof(i=r.value)?i.replace(ft,""):null==i?"":i:void 0}}),b.extend({valHooks:{option:{get:function(e){var t=b.find.attr(e,"value");return null!=t?t:ut(b.text(e))}},select:{get:function(e){var t,i,n,r=e.options,o=e.selectedIndex,s="select-one"===e.type,a=s?null:[],h=s?o+1:r.length;for(n=o<0?h:s?o:0;n-1)&&(i=!0);return i||(e.selectedIndex=-1),o}}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=b.inArray(b(e).val(),t)>-1}},f.checkOn||(b.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),f.focusin="onfocusin"in e;var mt=/^(?:focusinfocus|focusoutblur)$/,gt=function(e){e.stopPropagation()};b.extend(b.event,{trigger:function(t,i,r,o){var s,a,h,l,c,d,p,f,y=[r||n],v=u.call(t,"type")?t.type:t,w=u.call(t,"namespace")?t.namespace.split("."):[];if(a=f=h=r=r||n,3!==r.nodeType&&8!==r.nodeType&&!mt.test(v+b.event.triggered)&&(v.indexOf(".")>-1&&(v=(w=v.split(".")).shift(),w.sort()),c=v.indexOf(":")<0&&"on"+v,(t=t[b.expando]?t:new b.Event(v,"object"==typeof t&&t)).isTrigger=o?2:3,t.namespace=w.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+w.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),i=null==i?[t]:b.makeArray(i,[t]),p=b.event.special[v]||{},o||!p.trigger||!1!==p.trigger.apply(r,i))){if(!o&&!p.noBubble&&!g(r)){for(l=p.delegateType||v,mt.test(l+v)||(a=a.parentNode);a;a=a.parentNode)y.push(a),h=a;h===(r.ownerDocument||n)&&y.push(h.defaultView||h.parentWindow||e)}for(s=0;(a=y[s++])&&!t.isPropagationStopped();)f=a,t.type=s>1?l:p.bindType||v,(d=(G.get(a,"events")||{})[t.type]&&G.get(a,"handle"))&&d.apply(a,i),(d=c&&a[c])&&d.apply&&W(a)&&(t.result=d.apply(a,i),!1===t.result&&t.preventDefault());return t.type=v,o||t.isDefaultPrevented()||p._default&&!1!==p._default.apply(y.pop(),i)||!W(r)||c&&m(r[v])&&!g(r)&&((h=r[c])&&(r[c]=null),b.event.triggered=v,t.isPropagationStopped()&&f.addEventListener(v,gt),r[v](),t.isPropagationStopped()&&f.removeEventListener(v,gt),b.event.triggered=void 0,h&&(r[c]=h)),t.result}},simulate:function(e,t,i){var n=b.extend(new b.Event,i,{type:e,isSimulated:!0});b.event.trigger(n,null,t)}}),b.fn.extend({trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,t){var i=this[0];if(i)return b.event.trigger(e,t,i,!0)}}),f.focusin||b.each({focus:"focusin",blur:"focusout"},function(e,t){var i=function(e){b.event.simulate(t,e.target,b.event.fix(e))};b.event.special[t]={setup:function(){var n=this.ownerDocument||this,r=G.access(n,t);r||n.addEventListener(e,i,!0),G.access(n,t,(r||0)+1)},teardown:function(){var n=this.ownerDocument||this,r=G.access(n,t)-1;r?G.access(n,t,r):(n.removeEventListener(e,i,!0),G.remove(n,t))}}});var yt=e.location,vt=Date.now(),wt=/\?/;b.parseXML=function(t){var i;if(!t||"string"!=typeof t)return null;try{i=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){i=void 0}return i&&!i.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+t),i};var bt=/\[\]$/,xt=/\r?\n/g,_t=/^(?:submit|button|image|reset|file)$/i,Tt=/^(?:input|select|textarea|keygen)/i;function Et(e,t,i,n){var r;if(Array.isArray(t))b.each(t,function(t,r){i||bt.test(e)?n(e,r):Et(e+"["+("object"==typeof r&&null!=r?t:"")+"]",r,i,n)});else if(i||"object"!==w(t))n(e,t);else for(r in t)Et(e+"["+r+"]",t[r],i,n)}b.param=function(e,t){var i,n=[],r=function(e,t){var i=m(t)?t():t;n[n.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==i?"":i)};if(Array.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){r(this.name,this.value)});else for(i in e)Et(i,e[i],t,r);return n.join("&")},b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&Tt.test(this.nodeName)&&!_t.test(e)&&(this.checked||!le.test(e))}).map(function(e,t){var i=b(this).val();return null==i?null:Array.isArray(i)?b.map(i,function(e){return{name:t.name,value:e.replace(xt,"\r\n")}}):{name:t.name,value:i.replace(xt,"\r\n")}}).get()}});var At=/%20/g,Ct=/#.*$/,St=/([?&])_=[^&]*/,kt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:GET|HEAD)$/,Ot=/^\/\//,Rt={},Mt={},Bt="*/".concat("*"),Dt=n.createElement("a");function It(e){return function(t,i){"string"!=typeof t&&(i=t,t="*");var n,r=0,o=t.toLowerCase().match(I)||[];if(m(i))for(;n=o[r++];)"+"===n[0]?(n=n.slice(1)||"*",(e[n]=e[n]||[]).unshift(i)):(e[n]=e[n]||[]).push(i)}}function Nt(e,t,i,n){var r={},o=e===Mt;function s(a){var h;return r[a]=!0,b.each(e[a]||[],function(e,a){var l=a(t,i,n);return"string"!=typeof l||o||r[l]?o?!(h=l):void 0:(t.dataTypes.unshift(l),s(l),!1)}),h}return s(t.dataTypes[0])||!r["*"]&&s("*")}function Lt(e,t){var i,n,r=b.ajaxSettings.flatOptions||{};for(i in t)void 0!==t[i]&&((r[i]?e:n||(n={}))[i]=t[i]);return n&&b.extend(!0,e,n),e}Dt.href=yt.href,b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(yt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Bt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Lt(Lt(e,b.ajaxSettings),t):Lt(b.ajaxSettings,e)},ajaxPrefilter:It(Rt),ajaxTransport:It(Mt),ajax:function(t,i){"object"==typeof t&&(i=t,t=void 0),i=i||{};var r,o,s,a,h,l,c,u,d,p,f=b.ajaxSetup({},i),m=f.context||f,g=f.context&&(m.nodeType||m.jquery)?b(m):b.event,y=b.Deferred(),v=b.Callbacks("once memory"),w=f.statusCode||{},x={},_={},T="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!a)for(a={};t=kt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?s:null},setRequestHeader:function(e,t){return null==c&&(e=_[e.toLowerCase()]=_[e.toLowerCase()]||e,x[e]=t),this},overrideMimeType:function(e){return null==c&&(f.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||T;return r&&r.abort(t),A(0,t),this}};if(y.promise(E),f.url=((t||f.url||yt.href)+"").replace(Ot,yt.protocol+"//"),f.type=i.method||i.type||f.method||f.type,f.dataTypes=(f.dataType||"*").toLowerCase().match(I)||[""],null==f.crossDomain){l=n.createElement("a");try{l.href=f.url,l.href=l.href,f.crossDomain=Dt.protocol+"//"+Dt.host!=l.protocol+"//"+l.host}catch(e){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!=typeof f.data&&(f.data=b.param(f.data,f.traditional)),Nt(Rt,f,i,E),c)return E;for(d in(u=b.event&&f.global)&&0==b.active++&&b.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Pt.test(f.type),o=f.url.replace(Ct,""),f.hasContent?f.data&&f.processData&&0===(f.contentType||"").indexOf("application/x-www-form-urlencoded")&&(f.data=f.data.replace(At,"+")):(p=f.url.slice(o.length),f.data&&(f.processData||"string"==typeof f.data)&&(o+=(wt.test(o)?"&":"?")+f.data,delete f.data),!1===f.cache&&(o=o.replace(St,"$1"),p=(wt.test(o)?"&":"?")+"_="+vt+++p),f.url=o+p),f.ifModified&&(b.lastModified[o]&&E.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&E.setRequestHeader("If-None-Match",b.etag[o])),(f.data&&f.hasContent&&!1!==f.contentType||i.contentType)&&E.setRequestHeader("Content-Type",f.contentType),E.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+Bt+"; q=0.01":""):f.accepts["*"]),f.headers)E.setRequestHeader(d,f.headers[d]);if(f.beforeSend&&(!1===f.beforeSend.call(m,E,f)||c))return E.abort();if(T="abort",v.add(f.complete),E.done(f.success),E.fail(f.error),r=Nt(Mt,f,i,E)){if(E.readyState=1,u&&g.trigger("ajaxSend",[E,f]),c)return E;f.async&&f.timeout>0&&(h=e.setTimeout(function(){E.abort("timeout")},f.timeout));try{c=!1,r.send(x,A)}catch(e){if(c)throw e;A(-1,e)}}else A(-1,"No Transport");function A(t,i,n,a){var l,d,p,x,_,T=i;c||(c=!0,h&&e.clearTimeout(h),r=void 0,s=a||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,n&&(x=function(e,t,i){for(var n,r,o,s,a=e.contents,h=e.dataTypes;"*"===h[0];)h.shift(),void 0===n&&(n=e.mimeType||t.getResponseHeader("Content-Type"));if(n)for(r in a)if(a[r]&&a[r].test(n)){h.unshift(r);break}if(h[0]in i)o=h[0];else{for(r in i){if(!h[0]||e.converters[r+" "+h[0]]){o=r;break}s||(s=r)}o=o||s}if(o)return o!==h[0]&&h.unshift(o),i[o]}(f,E,n)),x=function(e,t,i,n){var r,o,s,a,h,l={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)l[s.toLowerCase()]=e.converters[s];for(o=c.shift();o;)if(e.responseFields[o]&&(i[e.responseFields[o]]=t),!h&&n&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),h=o,o=c.shift())if("*"===o)o=h;else if("*"!==h&&h!==o){if(!(s=l[h+" "+o]||l["* "+o]))for(r in l)if((a=r.split(" "))[1]===o&&(s=l[h+" "+a[0]]||l["* "+a[0]])){!0===s?s=l[r]:!0!==l[r]&&(o=a[0],c.unshift(a[1]));break}if(!0!==s)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:"parsererror",error:s?e:"No conversion from "+h+" to "+o}}}return{state:"success",data:t}}(f,x,E,l),l?(f.ifModified&&((_=E.getResponseHeader("Last-Modified"))&&(b.lastModified[o]=_),(_=E.getResponseHeader("etag"))&&(b.etag[o]=_)),204===t||"HEAD"===f.type?T="nocontent":304===t?T="notmodified":(T=x.state,d=x.data,l=!(p=x.error))):(p=T,!t&&T||(T="error",t<0&&(t=0))),E.status=t,E.statusText=(i||T)+"",l?y.resolveWith(m,[d,T,E]):y.rejectWith(m,[E,T,p]),E.statusCode(w),w=void 0,u&&g.trigger(l?"ajaxSuccess":"ajaxError",[E,f,l?d:p]),v.fireWith(m,[E,T]),u&&(g.trigger("ajaxComplete",[E,f]),--b.active||b.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,i){return b.get(e,t,i,"json")},getScript:function(e,t){return b.get(e,void 0,t,"script")}}),b.each(["get","post"],function(e,t){b[t]=function(e,i,n,r){return m(i)&&(r=r||n,n=i,i=void 0),b.ajax(b.extend({url:e,type:t,dataType:r,data:i,success:n},b.isPlainObject(e)&&e))}}),b._evalUrl=function(e){return b.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},b.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=b(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return m(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),i=t.contents();i.length?i.wrapAll(e):t.append(e)})},wrap:function(e){var t=m(e);return this.each(function(i){b(this).wrapAll(t?e.call(this,i):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){b(this).replaceWith(this.childNodes)}),this}}),b.expr.pseudos.hidden=function(e){return!b.expr.pseudos.visible(e)},b.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},b.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Ft={0:200,1223:204},jt=b.ajaxSettings.xhr();f.cors=!!jt&&"withCredentials"in jt,f.ajax=jt=!!jt,b.ajaxTransport(function(t){var i,n;if(f.cors||jt&&!t.crossDomain)return{send:function(r,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];for(s in t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest"),r)a.setRequestHeader(s,r[s]);i=function(e){return function(){i&&(i=n=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Ft[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=i(),n=a.onerror=a.ontimeout=i("error"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){i&&n()})},i=i("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(i)throw e}},abort:function(){i&&i()}}}),b.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),b.ajaxTransport("script",function(e){var t,i;if(e.crossDomain)return{send:function(r,o){t=b("